<?php session_start();
include("../config.php");
require_once("cLogin.php");
require_once("cResultado.php");
require_once("PHPLogger.php");
require_once("MisPuntos.php");
$LOGGER = new PHPLogger(LOGGER_PATH, LOGGER_LEVEL);
$LOGIN = unserialize($_SESSION['loginClass']);
class BykomCliente
{

	function getResultado($mysqli) {
		if ($rs = $mysqli->store_result()) {
       		if($rs->num_rows >0) {
    			$i=0;
				while ($finfo = $rs->fetch_field()) {
              	$campos[$finfo->name]=$i;
              	$i++;
				}
				while ($row = $rs->fetch_row()) $vec[] = $row;
				$rs->free_result();
				return new cResultado($campos, $vec);
       		}
			$mysqli->close();
		}
		return new cResultado();
	}
	/**********************************************************************/
	function LoginInitialValidation($loginClass){
		global $LOGGER;
		$LOGGER->addLine('INFO', 'Login -> Initial Validation Start');
		//REALIZO CONSULTA INICIAL AL SERVER
		$privateKeyCode = '1@%(&0A';
		$publicKeyCode = PUBLICKEYCODE;
		$resultado = BykomCliente::LoginDataActivation($privateKeyCode.$publicKeyCode);

		if (($resultado->cantidad() == 0)||(!$resultado->campo('data', 0))){
			//El codigo de llave del cliente es invalido o no existe
			$LOGGER->addLine('INFO', 'El codigo de llave del cliente es invalido o no existe');
			$loginClass->errorCode = 19;
			return $loginClass;
			}
		//INICIALIZO LAS VARIABLES DE DATA:
		$data = str_replace("|",",",$resultado->campo('data', 0));
		$dataArray = split(",",$data);
		$TI = substr($dataArray[0],3); //Tipo de cuenta
		$CC = substr($dataArray[1],3); //Cantidad de cuentas "PRO" concurrentes
		$HK = substr($dataArray[2],3); //Key de activacion del servidor
		$VE = substr($dataArray[3],3); //Fecha de vencimiento de la key del servidor
		$HA = substr($dataArray[4],3); //Fecha actual del servidor para comprovacion
		$VS = substr($dataArray[5],3); //Estado de vencimiento: 1=llave vencida, 0=llave OK
		$MO = substr($dataArray[6],3); //Acceso desde celular: 0=NO, 1=SI

		//(1) Validacion del numero de llave
		//El codigo de llave del cliente no coincide con el del servidor
		if ($publicKeyCode!=$HK){
			$LOGGER->addLine('INFO', 'El codigo de llave del cliente no coincide con el del servidor');
			$loginClass->errorCode = 20;
			return $loginClass;
		}
		//(2) Validacion del vencimiento de la llave
		//La llave del producto se ha vencido. Contactese con su proveedor para mas detalles.
		if ($VS == 1){
			$LOGGER->addLine('INFO', 'La llave del producto se ha vencido.');
			$loginClass->errorCode = 21;
			return $loginClass;
		}

		//(3) VALIDACIONES GENERALES Y COMPLETO DATOS DE $loginClass.
		$loginClass = BykomCliente::LoginAbstracto($loginClass);

		//(4) Validacion tipo de cuenta.
		if (($TI==0)&&($loginClass->objetivoDB > 1)){
			$loginClass->errorCode = 22;
			return $loginClass;
		}
		else if($TI==1) //obligo a que la cuenta se comporte como NORMAL
				$loginClass->isPRO = 0;

		if ($loginClass->errorCode == 0) {	//SI NO EXISTEN ERRORES HASTA EL MOMENTO
			//(5) Validacion de cantidad de alias concurrentes por cuenta (la cuenta tb suma).
			//SOLO SE VALIDA SI LA CUENTA NO ES DEL TIPO DEALER.
			if ($loginClass->objetivo!=5){
				$ccc = BykomCliente::CountCuentasConcurrentes($loginClass->cuentaFk);

				if ($ccc<0){ //hubo un error
					$loginClass->errorCode = abs($ccc);
       				return $loginClass;
				}
     			if($loginClass->limitConnect <= $ccc){
					$loginClass->errorCode = 23;
       				return $loginClass;
				}
			}

			//(6) Validacion de cantidad de cuentas PRO concurrentes por servidor.
			$ccPc = BykomCliente::CountCuentasPROConcurrentes();
			if ($ccPc<0){ //hubo un error
				$loginClass->errorCode = abs($ccPc);
       			return $loginClass;
			}

     		if($CC <= $ccPc){ //obligo a que la cuenta se comporte como NORMAL
				$loginClass->isPRO = 0;
			}

		}
		$loginClass->generarPermisos();

		if ($MO == NULL || $MO != 1) {
			$loginClass->accessPhoneGeneral = 0;
		} else {
			$loginClass->accessPhoneGeneral = 1;
		}

/*		echo("<script language='JavaScript' type='text/javascript'>");
		echo("alert('" . $SQL . "');");
		echo("</script>");*/

		return $loginClass;
	}

	/**********************************************************************/
	function CountCuentasConcurrentes($cuenta) { //retorna la cantidad de cuentas/alias que hay logueadas en el momento de la consulta
			$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     		if (mysqli_connect_errno())
       			return  -1; //codigo de error en negativo
			$SQL = " Select count(UL.`logueado`) as cantidad ".
				   " from `userlogued` UL ".
				   " where UL.`logueado` = 1 AND ( ".
				   " UL.`cuentaFk` = ".$cuenta." OR ".
				   "(".
				   " (UL.`objetivo` = 4) AND".
      			   " (UL.`cuentaFk` IN (Select AL.id from aliases AL where AL.`cuentaFk`=".$cuenta.")) ".
				   "))";

			if (!$mysqli->real_query($SQL)){
       			return  -2; //codigo de error en negativo
			}

     	   	$resultado = BykomCliente::getResultado($mysqli);
		    return ($resultado->campo('cantidad', 0));
	}

	/**********************************************************************/
	function CountCuentasPROConcurrentes() { //retorna la cantidad de cuentas PRO que hay logueadas en el servidor en el momento de la consulta
			global $LOGGER;
			$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     		if (mysqli_connect_errno())
       			return  -1; //codigo de error en negativo
			$SQL = "SELECT count(*) as cantidad ".
				   "FROM `userlogued` UL ".
			       "WHERE UL.`logueado` = 1 AND ".
				   "( ";
			//PARA OBJETIVOS FIJO Y MOVIL
		    $SQL .=" ( ".
                   "  ((UL.`objetivo` = 1)or(UL.`objetivo` = 2))  and ".
                   "  (exists (select AM.`ORDER_ID` ".
                   "           from `abmacodigos` AM ".
                   "           where AM.`ORDER_ID` = UL.`cuentaFk` and ".
                   "                 AM.`OBJETIVO` = UL.`objetivo` and ".
                   "                 AM.`CLIENTE_PRO` = 1)) ".
                   " ) OR ";
			//PARA OBJETIVO FLOTA
            $SQL .=" ( ".
                   "  (UL.`objetivo` = 3) and ".
                   "  (exists (select TL.`ORDER_ID` ".
                   "           from `tlmapersonas` TL ".
                   "           where TL.`ORDER_ID` = UL.`cuentaFk` and ".
                   "                 TL.`CLIENTE_PRO` = 1)) ".
                   " ) OR ";
			//PARA OBJETIVO ALIAS
       		$SQL .=" ( ".
        		   "  (UL.`objetivo` = 4) and ".
        		   "  (exists (select AL.`id` ".
                   "           from `aliases` AL ".
                   "           where AL.`id` = UL.`cuentaFk` and ".
                   "                (( ".
                   "                  ((AL.`esFlota` = 1) AND ".
                   "                   (exists (select TLa.`ORDER_ID` ".
                   "                            from `tlmapersonas` TLa ".
                   "                            where TLa.`ORDER_ID` = AL.`cuentaFk` and ".
                   "                                  TLa.`CLIENTE_PRO` = 1) ".
                   "                            )) ".
                   "                 ) OR ".
                   "                 ( ".
                   "                  ((AL.`esFlota` = 0) AND ".
                   "                   (exists (select AMa.`ORDER_ID` ".
                   "                            from `abmacodigos` AMa ".
                   "                            where AMa.`ORDER_ID` = AL.`cuentaFk` and ".
                   "                                  AMa.`CLIENTE_PRO` = 1) ".
                   "                            ))".
                   "                 ))".
                   "          ) ".
                   "  ) ".
                   " ) OR";
			//PARA OBJETIVO DEALER (siempre es PRO)
       		$SQL .=" ( ".
        		   "  (UL.`objetivo` = 5) ".
				   " ) ".
       			   ") ";
			if (!$mysqli->real_query($SQL))
       			return  -2; //codigo de error en negativo

     	   	$resultado = BykomCliente::getResultado($mysqli);
		    return ($resultado->campo('cantidad', 0));
	}

	/**********************************************************************/
	function LoginAbstracto($loginClass) {
		if ($loginClass->objetivo == 4) {
   			$loginClass = BykomCliente::LoginAlias($loginClass);

		} else if ($loginClass->objetivo == 1 || $loginClass->objetivo == 2) {
   			$loginClass = BykomCliente::LoginCuenta($loginClass);

		} else if ($loginClass->objetivo == 3) {
   			$loginClass = BykomCliente::LoginFlota($loginClass);
   		} else if ($loginClass->objetivo == 5) {
			$loginClass = BykomCliente::LoginDealer($loginClass);
		}
   		$return = BykomCliente::ProcesarLogin($loginClass);
		$return->label = $return->getLabelLogin();
		$return->isBykom = 0;
		return $return;
	}

	/**********************************************************************/

	function LoginAlias($loginClass)
	{
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR', mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}

		$LOGGER->addLine('INFO', 'Login Alias -> "'.$loginClassActual->alias.'"');

		$SQL = "SELECT a.cuentaFK as cuentaFk,a.esFlota as esFlota,a.id as id, a.clave as clave, a.mail as mail, ";
		$SQL.= "CAST(if(a.esFlota = '5',cast(d.login as char), ";
		$SQL.= "if(a.esFlota = '0', ";
		$SQL.= "CONCAT_WS(' - ', cast(rc.codigoAlfa as char), cast(abma2.ID_CL as char)), ";
		$SQL.= "cast(tlma2.USER_WEB as char) ";
        $SQL.= ") ) as char) as descripcion , a.permisoMonitor,
				a.permisoComandosGPRS,
				a.permisoComandosSMS,
				a.permisoVerReportes,
				a.permisoVerPuntos,
				a.permisoVerZonas,
				a.permisoVerContactos,
				a.permisoVerLogistica,
				a.permisoModificarPuntos,
				a.permisoModificarZonas,
				a.permisoModificarContactos,
				a.permisoModificarLogistica,
				a.permisoMobile,
				a.permisoAccedeSetup,
				a.permisoAccedeEventos,
				a.permisoAccedeUsuarios,
				a.permisoAccedeFacturas,
				a.permisoAccedeZonas,
				a.permisoAccedeContactos,
				a.permisoAccedeHorarios,
				a.habilitarFijo,
				a.habilitarMovil,
				a.habilitarFlota,
				a.habilitarRC,
				a.habilitarRCFijo ";
		$SQL.= "FROM aliases a ";
		$SQL.= "LEFT JOIN abmacodigos abma2 on (a.cuentaFk = abma2.ORDER_ID) ";
		$SQL.= "LEFT JOIN rcmacodigos rc on (rc.ORDER_ID = abma2.ID_RC) ";
		$SQL.= "LEFT JOIN tlmapersonas tlma2 on (a.cuentaFk = tlma2.ORDER_ID) ";
		$SQL.= "LEFT JOIN dealer d on d.id = a.cuentaFk ";
		$SQL.= "WHERE a.alias ='". trim($loginClassActual->alias) . "'";

	  	if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 5;
       		return  $loginClassActual;
     	}

     	$loginClassActual->cuentaFk 	= $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota 		= $resultado->campo('esFlota', 0);
		$loginClassActual->tablaId 		= $resultado->campo('id', 0);
		$loginClassActual->passwordDB 	= $resultado->campo('clave', 0);
		$loginClassActual->labelCuenta 	= $resultado->campo('descripcion', 0);
     	$loginClassActual->mail 		= $resultado->campo('mail', 0);
     	/////PERMISOS para el Alias///////
     	$iMonitorea 	= $resultado->campo('permisoMonitor', 0);
		$iComandosGPRS 	= $resultado->campo('permisoComandosGPRS', 0);
		$iComandosSMS 	= $resultado->campo('permisoComandosSMS', 0);
		$iVerReportes 	= $resultado->campo('permisoVerReportes', 0);
		$iVerPuntos 	= $resultado->campo('permisoVerPuntos', 0);
		$iVerZonas 		= $resultado->campo('permisoVerZonas', 0);
		$iVerContactos 	= $resultado->campo('permisoVerContactos', 0);
		$iVerLogistica 	= $resultado->campo('permisoVerLogistica', 0);
     	$iModificaPuntos= $resultado->campo('permisoModificarPuntos', 0);
     	$iModificaZonas	= $resultado->campo('permisoModificarZonas', 0);
		$iModificaContactos	= $resultado->campo('permisoModificarContactos', 0);
		$iModificarLogistica= $resultado->campo('permisoModificarLogistica', 0);
		$iAccessMovil	= $resultado->campo('permisoMobile', 0);
		$iAccedeSetup	= $resultado->campo('permisoAccedeSetup', 0);
		$iAccedeEventos = $resultado->campo('permisoAccedeEventos', 0);
		$iAccedeUsuario = $resultado->campo('permisoAccedeUsuarios', 0);
     	$iAccedeFacturas= $resultado->campo('permisoAccedeFacturas', 0);
		$iAccedeZonas	= $resultado->campo('permisoAccedeZonas', 0);
		$iAccedeContactos	= $resultado->campo('permisoAccedeContactos', 0);
		$iAccedeHorarios= $resultado->campo('permisoAccedeHorarios', 0);
		$iHabilitaFijo 	= $resultado->campo('habilitarFijo', 0);
		$iHabilitaMovil = $resultado->campo('habilitarMovil', 0);
		$iHabilitaFlota = $resultado->campo('habilitarFlota', 0);
		$iHabilitaRC	= $resultado->campo('habilitarRC', 0);
		$iHabilitaRCFijo= $resultado->campo('habilitarRCFijo', 0);

		$loginClassActual->PERMISOSAlias = array($iMonitorea,$iComandosGPRS,$iComandosSMS,$iVerReportes,$iVerPuntos,$iVerZonas,$iVerContactos,$iVerLogistica,
		$iModificaPuntos,$iModificaZonas,$iModificaContactos,$iModificarLogistica,$iAccessMovil,$iAccedeSetup,$iAccedeEventos,$iAccedeUsuario,
		$iAccedeFacturas,$iAccedeZonas,$iAccedeContactos,$iAccedeHorarios,$iHabilitaFijo,$iHabilitaMovil,$iHabilitaFlota,
		$iHabilitaRC,$iHabilitaRCFijo);

     	return  $loginClassActual;
     }

	 /**********************************************************************/

	function LoginDealer($loginClass)
	{
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR', mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}

		$LOGGER->addLine('INFO', 'Login Dealer -> "'.$loginClassActual->codigoDealer.'"');

		$SQL = "SELECT *, ";
		$SQL.= "CONCAT_WS(' ', cast(d.nombre as char), cast(d.apellido as char)) as descripcion ";
		$SQL.= "FROM dealer d ";
		$SQL.= "WHERE d.login ='". trim($loginClassActual->codigoDealer) . "'";

	  	if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
			$LOGGER->addLine('FATAL', 'ERROR 5');
     		$loginClassActual->errorCode = 42;
       		return  $loginClassActual;
     	}

     	$loginClassActual->cuentaFk = $resultado->campo('id', 0);
		$loginClassActual->esFlota = 5;//antes estaba seteado con 1
		$loginClassActual->imagen = $resultado->campo('imagen', 0);
		$loginClassActual->tablaId = $resultado->campo('id', 0);
		$loginClassActual->labelCuenta = $resultado->campo('descripcion', 0);
		//INICIALIZO EL ARRAY DE PERMISOS DE OBJETIVOS DEALER
		$monitorea = $resultado->campo('permisoMonitor', 0);
		$comandosGPRS = $resultado->campo('permisoComandosGPRS', 0);
		$comandosSMS = $resultado->campo('permisoComandosSMS', 0);
		$puntos = $resultado->campo('permisoPuntos', 0);
		$zonas = $resultado->campo('permisoZonas', 0);
		$logistica = $resultado->campo('permisoLogistica', 0);
		$visualizaContactos = $resultado->campo('permisoVisualizaContactos', 0);
		$modificaContactos 	= $resultado->campo('permisoModificaContactos', 0);
		$loginClassActual->PERMISOSdealer = array($monitorea,$comandosGPRS,$comandosSMS,$puntos,$zonas,$logistica,$visualizaContactos,$modificaContactos);

     	return  $loginClassActual;
     }


	/**********************************************************************/
	function LoginFlota($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR', mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}

		$LOGGER->addLine('INFO', 'Login Flota -> "'.$loginClassActual->codigoFlota.'"');

		$SQL = " SELECT tlma.ORDER_ID as cuentaFk from tlmapersonas tlma " .
			   " WHERE tlma.USER_WEB = '" . $loginClassActual->codigoFlota . "'" .
			   " AND tlma.ES_FLOTA = true";

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 6;
       		return  $loginClassActual;
     	}
     	$loginClassActual->cuentaFk = $resultado->campo('cuentaFk', 0);
     	$loginClassActual->tablaId = $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota = 1;
		$loginClassActual->labelCuenta = $loginClassActual->codigoFlota;
		return $loginClassActual;
	}

	/**********************************************************************/
	function LoginCuenta($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR', mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
		$LOGGER->addLine('INFO', 'Login Cuenta -> "'.$loginClassActual->codigocuenta.'"');

		$SQL = " SELECT abma.ORDER_ID as cuentaFk FROM abmacodigos abma " .
			   " INNER JOIN rcmacodigos rc on (rc.ORDER_ID = abma.ID_RC) " .
               " WHERE rc.CODIGOALFA = '" . $loginClassActual->codigorc . "'" .
               " AND abma.ID_CL = '" . $loginClassActual->codigocuenta . "'" .
               " AND abma.PARTICION = " . $loginClassActual->particion .
               " AND abma.OBJETIVO = ". $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 7;
       		return  $loginClassActual;
     	}
     	$loginClassActual->cuentaFk = $resultado->campo('cuentaFk', 0);
     	$loginClassActual->tablaId = $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota = 0;
		$loginClassActual->labelCuenta = $loginClassActual->codigorc."-".$loginClassActual->codigocuenta;
		return $loginClassActual;

	}
	/**********************************************************************/
	function ProcesarLogin($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		if ($loginClass->errorCode != 0) return $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
		if (mysqli_connect_errno()) {
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
     	if ($loginClassActual->esFlota == 0) {
			if (BYKOM_DB_TYPE == 0) {
				$SQL = "SELECT abma.objetivo as objetivo, " .
						  "abma.AB_ENVCLAVE as clave, " .
						  "elt(abma.WEBCLIENTE,1,0) as habilitado, " .
						  "abma.MONITOREO_WEB as monitoreoWeb, " .
						  "ie.email as mail, " .
						  "abma.ENVIO_GPRS as envioGPRS, " .
						  "abma.ENVIO_SMS as envioSMS , ".
						  "abma.CLIENTE_PRO as isPRO, " .
						  "abma.CONEXIONES_CONCURRENTES as limitConnect, ".
						  "abma.ACCESS_PHONE as accessPhone ".
					 "FROM abmacodigos abma " .
					 " LEFT JOIN internet_email ie on (abma.email_env = ie.codigoemai)" .
				     " WHERE abma.order_id = " . $loginClassActual->cuentaFk;
			} else {
				$SQL = "SELECT abma.objetivo as objetivo, " .
						  "abma.AB_ENVCLAVE as clave, " .
						  "elt(abma.WEBCLIENTE,1,0) as habilitado, " .
						  "abma.MONITOREO_WEB as monitoreoWeb, " .
						  "abma.email_env as mail, " .
						  "abma.ENVIO_GPRS as envioGPRS, " .
						  "abma.ENVIO_SMS as envioSMS , ".
						  "abma.CLIENTE_PRO as isPRO, " .
						  "abma.CONEXIONES_CONCURRENTES as limitConnect, ".
						  "abma.ACCESS_PHONE as accessPhone ".
					 "FROM abmacodigos abma " .
				     " WHERE abma.order_id = " . $loginClassActual->cuentaFk;
			}

		} else {
			if ($loginClassActual->objetivo == 5 || $loginClassActual->esFlota == 5){ //es una cuenta DEALER
				$SQL = "SELECT 5 as objetivo, d.clave as clave, elt(d.habilitado,1,0) as habilitado, d.permisoMonitor as monitoreoWeb, d.email as mail, d.permisoComandosGPRS as envioGPRS, d.permisoComandosSMS as envioSMS,
				           1 as isPRO, d.CONEXIONES_CONCURRENTES as limitConnect,d.permisoPuntos as iPermisoPuntos, d.permisoZonas as iPermisoZonas, d.permisoLogistica as iPermisoLogistica, d.permisoVisualizaContactos as iPermisoVisualizaContactos, d.permisoModificaContactos as iPermisoModificaContactos,
						   1 as accessPhone
					FROM dealer d " .
				    " WHERE d.id = " . $loginClassActual->cuentaFk;
			}else{	//es una cuenta tipo FLOTA
				if (BYKOM_DB_TYPE == 0) {
					$SQL = "SELECT 3 as objetivo, " .
							"tlma.PASS_WEB as clave, " .
							"elt(tlma.WEBCLIENTE,1,0) as habilitado, " .
							"tlma.MONITOREO_WEB as monitoreoWeb, " .
							"ie.email as mail, " .
							"tlma.ENVIO_GPRS as envioGPRS, " .
							"tlma.ENVIO_SMS as envioSMS, ".
				            "tlma.CLIENTE_PRO as isPRO, " .
				            "tlma.CONEXIONES_CONCURRENTES as limitConnect, ".
						    "tlma.ACCESS_PHONE as accessPhone " .
						  "FROM tlmapersonas tlma " .
				     	" LEFT JOIN internet_email ie on (tlma.codigoemai = ie.codigoemai)" .
				     	" WHERE tlma.order_id = " . $loginClassActual->cuentaFk;
				} else {
					$SQL = "SELECT 3 as objetivo, " .
							"tlma.PASS_WEB as clave, " .
							"elt(tlma.WEBCLIENTE,1,0) as habilitado, " .
							"tlma.MONITOREO_WEB as monitoreoWeb, " .
							"tlma.codigoemai as mail, " .
							"tlma.ENVIO_GPRS as envioGPRS, " .
							"tlma.ENVIO_SMS as envioSMS, ".
				            "tlma.CLIENTE_PRO as isPRO, " .
				            "tlma.CONEXIONES_CONCURRENTES as limitConnect, ".
						    "tlma.ACCESS_PHONE as accessPhone " .
						  "FROM tlmapersonas tlma " .
				     	" WHERE tlma.order_id = " . $loginClassActual->cuentaFk;
				}
			}
		}
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 8;
       		return  $loginClassActual;
     	}

     	//Si no es alias, le seteo mail y clave de la cuenta. Sino obtuvo la info del alias.
     	if ($loginClassActual->objetivo != 4) {
     		$loginClassActual->passwordDB 		= $resultado->campo('clave', 0);
     		$loginClassActual->mail 			= $resultado->campo('mail', 0);
     		$loginClassActual->accessPhoneCuenta= $resultado->campo('accessPhone', 0);
     	}
     	$loginClassActual->objetivoDB 	= $resultado->campo('objetivo', 0);
     	$loginClassActual->habilitado 	= $resultado->campo('habilitado', 0);
   		$loginClassActual->monitoreoWeb = $resultado->campo('monitoreoWeb', 0);
		$loginClassActual->envioGPRS 	= $resultado->campo('envioGPRS', 0);
		$loginClassActual->envioSMS 	= $resultado->campo('envioSMS', 0);
		$loginClassActual->isPRO 		= $resultado->campo('isPRO', 0);
		$loginClassActual->limitConnect = $resultado->campo('limitConnect', 0);
		$adminCNF 						= BykomCliente::getAdminConfig();
		$loginClassActual->chat 		= $adminCNF->campo('chat', 0);
		$blockLoginFail 				= $adminCNF->campo('blockLoginFail', 0);

		if($loginClassActual->objetivo == 4){//Alias
			$SQLAlias = "select
				permisoMonitor,	permisoComandosGPRS, permisoComandosSMS, permisoVerReportes, permisoVerPuntos, permisoVerZonas, permisoVerContactos, permisoVerLogistica,
				permisoModificarPuntos, permisoModificarZonas, permisoModificarContactos, permisoModificarLogistica, permisoMobile, permisoAccedeSetup, permisoAccedeEventos, permisoAccedeUsuarios,
				permisoAccedeFacturas, permisoAccedeZonas, permisoAccedeContactos, permisoAccedeHorarios, habilitarFijo, habilitarMovil, habilitarFlota,
				habilitarRC, habilitarRCFijo
				from  aliases a where a.id = ".$loginClassActual->tablaId;

			if (!$mysqli->real_query($SQLAlias)) {
				$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQLAlias);
	      		$loginClassActual->errorCode = 2;
	       		return  $loginClassActual;
	     	}
	     	$resultado2 = BykomCliente::getResultado($mysqli);
	     	if ($resultado2->cantidad() == 0) {
	     		$loginClassActual->errorCode = 8;
	       		return  $loginClassActual;
	     	}
	     	//$loginClassActual->monitoreoWeb 	= $resultado2->campo('permisoMonitor', 0);
			//$loginClassActual->envioGPRS 		= $resultado2->campo('permisoComandosGPRS', 0);
			//$loginClassActual->envioSMS 		= $resultado2->campo('permisoComandosSMS', 0);
			$loginClassActual->accessPhoneCuenta= $resultado2->campo('permisoMobile', 0);

			if($loginClassActual->esFlota == 5){//si es un alias de un dealer
				$monitorea 		= $resultado->campo('monitoreoWeb', 0);
				$comandosGPRS 	= $resultado->campo('envioGPRS', 0);
				$comandosSMS 	= $resultado->campo('envioSMS', 0);
				$puntos 		= $resultado->campo('iPermisoPuntos', 0);
				$zonas 			= $resultado->campo('iPermisoZonas', 0);
				$logistica 		= $resultado->campo('iPermisoLogistica', 0);
				$visualizaContactos = $resultado->campo('iPermisoVisualizaContactos', 0);
				$modificaContactos 	= $resultado->campo('iPermisoModificaContactos', 0);
				$loginClassActual->PERMISOSdealer = array($monitorea,$comandosGPRS,$comandosSMS,$puntos,$zonas,$logistica,$visualizaContactos,$modificaContactos);
			}
		}


     	if ($loginClassActual->habilitado == 0) {
     		$loginClassActual->errorCode = 9;
       		return  $loginClassActual;
     	}
     	$LOGGER->addLine('DEBUG',"Cuenta de mail es|" . $loginClassActual->mail . "|");
     	if (trim($loginClassActual->mail) == '') {
     		$loginClassActual->errorCode = 10;
       		return  $loginClassActual;
     	}

     	if (trim($loginClass->passwordDB) == '') {
     		$loginClassActual->errorCode = 11;
     		/*if (BykomCliente::recordatorioDePassword($loginClassActual->cuentaFk, $loginClassActual->objetivoDB) != 1) {
     			$loginClassActual->errorCode = 2;
     		}*/
     		$loginClassActual->errorCode = 16;
     		return  $loginClassActual;
     	}

     	$loginClassActual = BykomCliente::checkLoginCliente($loginClassActual);
     	if ($loginClassActual->usuariosLogueados > 0) {
     		$loginClassActual->errorCode = 18;
       		return  $loginClassActual;
     	}

     	$loginClassActual = BykomCliente::ComprobarAbrlLogin($loginClassActual);
     	if ($loginClassActual->errorCode != 0) {
     		return $loginClassActual;
     	}
     	if (($loginClassActual->contadorLoginFail >= $blockLoginFail) && ($blockLoginFail != 0)) {
     		$loginClassActual->errorCode = 12;
       		return  $loginClassActual;
     	}

     	if ($loginClassActual->password != $loginClassActual->passwordDB) {
     		$loginClassActual->contadorLoginFail = $loginClassActual->contadorLoginFail + 1;
     		$loginClassActual = BykomCliente::updateAbrlLogin($loginClassActual, $loginClassActual->contadorLoginFail);
     		$loginClassActual->errorCode = 13;
       		return  $loginClassActual;
     	} else {
     		$loginClassActual = BykomCliente::updateAbrlLogin($loginClassActual, 0);
     		$loginClassActual->contadorLoginFail = 0;
     		$loginClassActual->errorCode = 0;
     		return $loginClassActual;
     	}
     	$loginClassActual->errorCode = 30;
     	return $loginClassActual;
	}
	/**********************************************************************/
	function recordatorioDePassword($cuentaFk, $objetivo) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
		$SQL = "INSERT INTO recordatorio (cuentaFk, objetivo, tipo, enviado) " .
		       " VALUES (" . $cuentaFk . ", " . $objetivo. ", 1, 0)" ;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		return 0;
     	}
     	return  1;
	}
	/**********************************************************************/
	function ComprobarAbrlLogin($loginClassActual) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
		$SQL = "select abrllogin.CONTADOR as contador, abrllogin.ULTIMAFECHA as fecha" .
			       " from abrllogin where abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
			       " and abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);

     	if ($resultado->cantidad() == 0) {
     		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
       		$SQL = "insert into abrllogin (abrllogin.ORDER_RL, abrllogin.CONTADOR, abrllogin.ULTIMAFECHA,abrllogin.`TYPE`)
       				values (". $loginClassActual->tablaId.", 0, now(), ".$loginClassActual->objetivo.")";
            if (!$mysqli->real_query($SQL)) {
				$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      			$loginClassActual->errorCode = 2;
       			return  $loginClassActual;
     		}
     	}
     	$SQL = "select abrllogin.CONTADOR as contador, abrllogin.ULTIMAFECHA as fecha" .
			       " from abrllogin where abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
			       " and abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	$loginClassActual->contadorLoginFail = $resultado->campo('contador', 0);
     	$loginClassActual->ultimaFecha = $resultado->campo('fecha', 0);
     	return $loginClassActual;
	}

	/**********************************************************************/
	function updateAbrlLogin($loginClassActual, $valor) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
		$SQL = "UPDATE abrllogin SET abrllogin.CONTADOR = " . $valor .
               " WHERE abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
               " AND abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	return $loginClassActual;
	}

	/**********************************************************************/
	function checkLoginCliente($loginClassActual) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
		$SQL = "SELECT ul.logueado FROM userlogued ul" .
               " WHERE ul.logueado = 1 AND" .
               " ul.cuentaFk = "  . $loginClassActual->cuentaFk .
               " AND ul.objetivo = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$respuesta = BykomCliente::getResultado($mysqli);
     	$loginClassActual->usuariosLogueados = $respuesta->cantidad();
     	return $loginClassActual;
	}

	/**********************************************************************/
	function Login ($codigorc,$codigocuenta,$particion,$password,$objetivo)
	{
		global $LOGGER;
    	$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
		$SQL = "call z_Login_Cliente2('$codigorc','$codigocuenta','$particion','$password','$objetivo')";
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      		exit();
    	}
    	return BykomCliente::getResultado($mysqli);
	}

    /**********************************************************************/
	function LoginBykom ($userId, $clavePublica)
	{
	global $LOGGER;
    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
    $claveEncriptada = strtoupper(md5($clavePublica.PRIVATE_KEY));
	$SQL = "SELECT *, now() as HORA , AES_DECRYPT(u.OPDATA, '1234') as PERMISOS FROM `usersbykomweb` u ";
    $SQL .= "WHERE u.`USER_ID` = $userId AND u.`CLAVE` = '$claveEncriptada'";
	if (!$mysqli->real_query($SQL))
    {
		$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
     	 printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
     	 exit();
    }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function LoginDataActivation($keyCode)
	{
	global $LOGGER;
    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	$SQL = "SELECT AES_DECRYPT(a.dato, '$keyCode') as data FROM `activacion` a limit 1";
	if (!$mysqli->real_query($SQL))
    {
	  $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
    }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function getAdminConfig()
	{
	global $LOGGER;
    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	$SQL = "select * from `adminconfig` ac order by ac.`id` desc LIMIT 1";
	if (!$mysqli->real_query($SQL))
    {
	  $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      exit();
    }
     return BykomCliente::getResultado($mysqli);
	}

    /**********************************************************************/
    function getCodigoClByCuentaId($cuentaFk)
	{
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
		$SQL = "select abma.codigocl as codigocl from abmacodigos abma where abma.ORDER_ID = " .$cuentaFk;
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      		exit();
    	}
     	$resultadoParcial = BykomCliente::getResultado($mysqli);
     	return $resultadoParcial->campo('codigocl', 0);
	}
	/**********************************************************************/
	function getFacturasByCodigoCl ($codigoCl, $iniPaginacion, $contar)
	{
		global $LOGGER;
    	$mysqli = new mysqli(HOST_ADM, USER_ADM, PASSWORD_ADM, DB_ADM);

		if ($contar == 2) { // quiero el total de las facturas
			$SQL = "call FacturasByCodigoCl('$codigoCl', '$iniPaginacion',100000, 0)";
		} else {
    	$SQL = "call FacturasByCodigoCl('$codigoCl', '$iniPaginacion',".RESULTADO_FACTURAS.", $contar)";
		}
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      		exit();
    	}
     	return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function getPdfById ($id)
	{
	global $LOGGER;
    $mysqli = new mysqli(HOST_ADM, USER_ADM, PASSWORD_ADM, DB_ADM);

	$SQL = "call z_PdfById('$id')";
	if (!$mysqli->real_query($SQL))
    {
	  $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      exit();
    }
    return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function Cuentas_Cliente($orderId)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno()) {
	   $LOGGER->addLine('ERROR', mysqli_connect_error());
       exit();
     }
     $SQL = "SELECT abma.codigocl as codigocl From abmacodigos abma";
	 $SQL.= " WHERE abma.order_id =". $orderId;
	 if (!$mysqli->real_query($SQL)) {
	 	$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
        exit();
     }
     $resultado = BykomCliente::getResultado($mysqli);
     $codigocl = $resultado->campo('codigocl',0);

     $SQL = "SELECT abma.order_id as ORDER_ID,
     				abma.nombre as nombre,
     				abma.nombre_dos as nombre_dos,
     				abma.codigocl as codigocl,
     				abma.AVL_PATENTE as patente,
     				abma.AVL_IDENTIFICADOR as identificador,
     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
     				CRC.IMAGEN as Imagen,
        			CRC.CODIGOALFA as CodigoAlfa
             FROM abmacodigos abma
             INNER JOIN rcmacodigos as CRC on CRC.ORDER_ID = abma.id_rc
             WHERE abma.CODIGOCL = " . $codigocl
             . " UNION (
   			 SELECT abma.order_id as ORDER_ID,
     				abma.nombre as nombre,
     				abma.nombre_dos as nombre_dos,
     				abma.codigocl as codigocl,
     				abma.AVL_PATENTE as patente,
     				abma.AVL_IDENTIFICADOR as identificador,
     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
     				CRC.IMAGEN as Imagen,
        			CRC.CODIGOALFA as CodigoAlfa
             FROM abrlsubcuentas abrl";
     $SQL.= " INNER JOIN abmacodigos abma ON abma.codigocl = abrl.codigocl";
     $SQL.= " INNER JOIN rcmacodigos as CRC on CRC.ORDER_ID = abma.id_rc";
	 $SQL.= " WHERE abrl.codigo_id = ". $codigocl . " AND abma.objetivo = 1)";


	 if (!$mysqli->real_query($SQL)) {
	 	$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
        exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Cuentas_Cliente_Movil($order_id)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL = "call z_Cuentas_Cliente_Movil('$order_id')";
     if (!$mysqli->real_query($SQL))
     {
       printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Cuentas_Movil_User_Bykom($cuentas)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL = "call z_Cuentas_Movil_User_Bykom('$cuentas')";
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Cuentas_Cliente_Movil_BIS($order_id)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
	 $SQL = "SELECT ABMA.ORDER_ID,
		     		ABMA.`ID_CL` as Movil,
					ABMA.nombre,
        			ABMA.nombre_dos,
        			ABMA.codigocl,
			        RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
		       		RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
	         		RTRIM(ABMA.`AVL_MARCA`) as Marca,
      		 		RTRIM(ABMA.`AVL_MODELO`) as Modelo,
		     		RTRIM(ABMA.`AVL_PATENTE`) as Patente,
       		 		RTRIM(ABMA.`AVL_ANIO`) as Anio,
       				RTRIM(ABMA.`AVL_COLOR`) as Color,
			        TipoAvl.`ORDER_ID` as CodeAvl,
       				RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
			        RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
       				0 as Grupo,
       				ABMA.`ACTIVO` as Activo,
			        ABMA.`AVL_RESTRINGIDO` as AvlRestringido,
					concat(CRC.`CODIGOALFA`,'-',ABMA.`ID_CL`,'-',cast(ABMA.particion as char)) as Codigo,
        			CRC.`IMAGEN` as Imagen,
        			CRC.`CODIGOALFA` as CodigoAlfa
			 from `abmacodigos` ABMA
			 LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			 inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			 where ABMA.ORDER_ID = ".$order_id;

     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Cuentas_Cliente_Movil_Flota($flotaId, $orderBy)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }

	 $SQL = "SELECT ABMA.ORDER_ID,
	 		        ABMA.nombre,
			        ABMA.nombre_dos,
			       	ABMA.codigocl,
	   				ABMA.`ID_CL` as Movil,
	   				RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
       				RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
       				RTRIM(ABMA.`AVL_MARCA`) as Marca,
       				RTRIM(ABMA.`AVL_MODELO`) as Modelo,
       				RTRIM(ABMA.`AVL_PATENTE`) as Patente,
       				RTRIM(ABMA.`AVL_ANIO`) as Anio,
       				RTRIM(ABMA.`AVL_COLOR`) as Color,
       				TipoAvl.`ORDER_ID` as CodeAvl,
       				RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
       				RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
       				if(isnull(ABMA.`GRUPOMOVIL`), 0, ABMA.`GRUPOMOVIL`) as Grupo,
       				ABMA.`ACTIVO` as Activo,
       				ABMA.`AVL_RESTRINGIDO` as AvlRestringido,
       				concat(CRC.`CODIGOALFA`,'-',ABMA.`ID_CL`,'-',cast(ABMA.particion as char)) as Codigo,
       				CRC.`IMAGEN` as Imagen,
       				CRC.`CODIGOALFA` as CodigoAlfa
			 from `abmacodigos` ABMA
			 inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			 LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			 where ABMA.FLOTA_ID = " .$flotaId . " ORDER BY " . $orderBy . ";";
	 $LOGGER->addLine('DEBUG', $SQL);
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function Cuentas_Cliente_Movil_FlotaAlias($aliasId, $orderBy)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
	  $SQL = "SELECT ABMA.ORDER_ID,
	 		        ABMA.nombre,
			        ABMA.nombre_dos,
			       	ABMA.codigocl,
	   				ABMA.`ID_CL` as Movil,
	   				RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
       				RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
       				RTRIM(ABMA.`AVL_MARCA`) as Marca,
       				RTRIM(ABMA.`AVL_MODELO`) as Modelo,
       				RTRIM(ABMA.`AVL_PATENTE`) as Patente,
       				RTRIM(ABMA.`AVL_ANIO`) as Anio,
       				RTRIM(ABMA.`AVL_COLOR`) as Color,
       				TipoAvl.`ORDER_ID` as CodeAvl,
       				RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
       				RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
       				if(isnull(ABMA.`GRUPOMOVIL`), 0, ABMA.`GRUPOMOVIL`) as Grupo,
       				ABMA.`ACTIVO` as Activo,
       				ABMA.`AVL_RESTRINGIDO` as AvlRestringido,
       				concat(CRC.`CODIGOALFA`,'-',ABMA.`ID_CL`,'-',cast(ABMA.particion as char)) as Codigo,
       				CRC.`IMAGEN` as Imagen,
       				CRC.`CODIGOALFA` as CodigoAlfa
			 from `abmacodigos` ABMA
			 inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			 LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			 where ABMA.`ORDER_ID` IN (select AM.`movilId` from `alias_movil` AM where AM.aliasId = ".$aliasId.")
	  		 ORDER BY " . $orderBy;

     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    //function Cuentas_Cliente_Movil_Dealer($id, $ddeRec, $countRec)
    function Cuentas_Cliente_Movil_Dealer($id, $orderBy){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
		$SQL.= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido
			   from `dealer_cuenta` D_Cta
			   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 2
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Cta.`dealerFk` = ".$id." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
			   and D_Cta.objetivo = 2 ";
		$SQL.= " UNION ";
		$SQL.= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido
			   from `dealer_rc` D_Rc
			   inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 2
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Rc.`dealerFk` = ".$id." and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
				and ABMA.OBJETIVO = 2 ";

		$SQL.= " UNION ";
		$SQL.= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido
			   from `dealer_flota` D_Flota
			   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Flota.`dealerFk` = ".$id." and (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
			   and ABMA.OBJETIVO = 2  ";
		$SQL.= " ORDER BY " . $orderBy;

	 $LOGGER->addLine('FATAL', $SQL);
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

    /**
     * Obtiene las flotas de un dealer
     * @param int $idDealer
     * @param string $orderBy
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
    function Cuentas_Cliente_Flotas_Dealer($idDealer,$orderBy,$idRC){
	     global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	     if (mysqli_connect_errno()){
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	     }
    	 $SQL= "select RTRIM(tlma.NOMBRE_MIX) as sDescription, df.flotaFk as iFlotaId, df.*,abma.ID_RC as idRc
				 from `dealer_flota` df
				 inner join tlmapersonas as tlma on tlma.ORDER_ID = df.flotaFk
				 join abmacodigos abma on abma.FLOTA_ID  = df.flotaFk
			     where df.`dealerFk` = ".$idDealer." and (isnull(df.`caduca`) or df.`caduca` >= now())";
    	 if($idRC != null){
    	 	$SQL.= " and abma.ID_RC = $idRC ";
    	 }
    	 $SQL.= " group by sDescription ";

    	if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
    	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**
     * Obtiene los RC de un dealer segun el tipo (fijo o movil)
     * @param int $idDealer
     * @param string $orderBy
     * @param int $iObjetivo
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
    function Cuentas_Cliente_Rc_Dealer($idDealer,$orderBy,$iObjCuenta){
	     global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	     if (mysqli_connect_errno()){
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	     }
    	 $SQL= "SELECT RTRIM(rc.NOMBRE) as sDescription, drc.empresaFk as iRCId, drc.objetivo as iObjetivo
				from `dealer_rc` drc
				inner join rcmacodigos as rc on rc.ORDER_ID = drc.empresaFk
			    where drc.`dealerFk` = ".$idDealer." and (isnull(drc.`caduca`) or drc.`caduca` >= now())
			    and drc.objetivo = $iObjCuenta ";

    	if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
    	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**
     * Obtiene los moviles de un dealer a partir de un RC y/o una flota.
     * @param int $idDealer
     * @param int $idRc
     * @param int $idFlota
     * @param string $orderBy
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
	function Cuentas_Cliente_Movil_Dealer_By_RCAndFlotas($id,$idRc,$idFlota, $orderBy){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     	if (mysqli_connect_errno()){
     	  printf("Conexion fallida: %s\n", mysqli_connect_error());
     	  exit();
     	}
     	$SQL= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido ";
     	if($idRc  && !$idFlota){//movil by RC
			$SQL.= " from `dealer_rc` D_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Rc.`dealerFk` = $id and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
					and  D_Rc.empresaFk = $idRc and ABMA.OBJETIVO = 2 ";
		}else if($idFlota && !$idRc){//movil by flota
			$SQL.= " from `dealer_flota` D_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Flota.`dealerFk` = $id and (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
				   and  D_Flota.flotaFk = $idFlota and ABMA.OBJETIVO = 2  ";
		}else if($idFlota && $idRc){
			$SQL.= " from `dealer_flota` D_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Flota.`dealerFk` = $id and (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
				   and  D_Flota.flotaFk = $idFlota and ABMA.ID_RC = $idRc and ABMA.OBJETIVO = 2 ";
		}

		if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
	     return BykomCliente::getResultado($mysqli);
    }
	/**
	 * Obtengo las cuentas de tipo fijo para un dealer
	 * @param int $iDealerId
	 * @param string $orderBy
	 * @param int $iRc
	 */
    function getCuentasByDealer($iDealerId,$orderBy,$iRc){
    	global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	    if (mysqli_connect_errno()){
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	    }
	    $SQL = "";
	    if($iRc==""){
			$SQL.= "SELECT abma.order_id as ORDER_ID,
     				abma.nombre as nombre,
     				abma.nombre_dos as nombre_dos,
     				abma.codigocl as codigocl,
     				abma.AVL_PATENTE as patente,
     				abma.AVL_IDENTIFICADOR as identificador,
     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
     				CRC.IMAGEN as Imagen,
        			CRC.CODIGOALFA as CodigoAlfa,
        			abma.LATITUD as latitud,
        			abma.LONGITUD as longitud,
        			abma.ACTIVO as activo
			   from `dealer_cuenta` D_Cta
			   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 1
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Cta.`dealerFk` = ".$iDealerId." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
			   and D_Cta.objetivo = 1 ";
			$SQL.= " UNION ";
	    }
		$SQL.= "SELECT abma.order_id as ORDER_ID,
		     		abma.nombre as nombre,
		     		abma.nombre_dos as nombre_dos,
		     		abma.codigocl as codigocl,
		     		abma.AVL_PATENTE as patente,
		     		abma.AVL_IDENTIFICADOR as identificador,
		     		concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
		     		CRC.IMAGEN as Imagen,
		        	CRC.CODIGOALFA as CodigoAlfa,
		        	abma.LATITUD as latitud,
        			abma.LONGITUD as longitud,
        			abma.ACTIVO as activo
			   from `dealer_rc` D_Rc
			   inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 1 ";
			   if($iRc!=""){
			   		$SQL.= " and D_Rc.empresaFk = $iRc ";
			   }
		$SQL.= " inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			    LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			    where D_Rc.`dealerFk` = ".$iDealerId." and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
				and ABMA.OBJETIVO = 1 ";
		if(trim($orderBy)){
			$SQL.= " ORDER BY " . $orderBy;
		}
	 	$LOGGER->addLine('FATAL', $SQL);
	 	if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	    }
	    return BykomCliente::getResultado($mysqli);
    }
	/**
	 * Obtengo las cuentas de tipo fijo para un Alias
	 * @param int $iDealerId
	 * @param string $orderBy
	 * @param int $iRc
	 */
    function getCuentasByAlias($iAliasId,$orderBy,$iRc,$iDealerId){
    	global $LOGGER,$LOGIN;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	    if (mysqli_connect_errno()){
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	    }
	    $SQLSELECT = " SELECT abma.order_id as ORDER_ID,
     				abma.nombre as nombre,
     				abma.nombre_dos as nombre_dos,
     				abma.codigocl as codigocl,
     				abma.AVL_PATENTE as patente,
     				abma.AVL_IDENTIFICADOR as identificador,
     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
     				CRC.IMAGEN as Imagen,
        			CRC.CODIGOALFA as CodigoAlfa ";
	    $SQL = "";
	    if($iRc==""){
	    	if($LOGIN->PERMISOSAlias[20]){//si tiene habilitado fijos (habilitarFijo=1)
				$SQLFROM1= " from `alias_movil` A_Cta
				   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = A_Cta.`movilId` and A_Cta.objetivo = 1
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Cta.`aliasId` = ".$iAliasId." and (isnull(A_Cta.`caduca`) or A_Cta.`caduca` >= now())
				   and A_Cta.objetivo = 1 ";

				$resultRows = cConfiguracion::getCuentasByAlias($iAliasId,1);
				if($resultRows->cantidad()==0){//si el Alias no tiene ninguna asignada tomo las del Dealer
					  $SQLFROM1 = " from `dealer_cuenta` D_Cta
				   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 1
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Cta.`dealerFk` = ".$iDealerId." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
				   and D_Cta.objetivo = 1 ";
				}
				$SQL.= $SQLSELECT.$SQLFROM1;
	    	}
	    }
		if($LOGIN->PERMISOSAlias[24]){//si tiene habilitado RC Fijos (habilitarRCFijo=1)
			if($SQL!=""){
				$SQL.= " UNION ";
			}
			$SQLFROM2 = " from `alias_rc` A_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = A_Rc.`empresaFk` and A_Rc.objetivo = 1 ";
			if($iRc!=""){
				$SQLFROM2.= " and A_Rc.empresaFk = $iRc ";
			}
			$SQLFROM2.= " inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				    LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				    where A_Rc.`aliasFk` = ".$iAliasId." and  (isnull(A_Rc.`caduca`) or A_Rc.`caduca` >= now())
					and ABMA.OBJETIVO = 1 ";
		   	$resultRows = cConfiguracion::getRCByAlias($iAliasId,1);
			if($resultRows->cantidad()==0){//si el Alias no tiene ninguna asignada tomo las del Dealer
				$SQLFROM2 = " from `dealer_rc` D_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 1 ";
				   if($iRc!=""){
				   		$SQLFROM2.= " and D_Rc.empresaFk = $iRc ";
				   }
				$SQLFROM2.= " inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				    LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				    where D_Rc.`dealerFk` = ".$iDealerId." and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
					and ABMA.OBJETIVO = 1 ";
			}
			$SQL.= $SQLSELECT.$SQLFROM2;
		}

		if($SQL!="" && trim($orderBy)){
			$SQL.= " ORDER BY " . $orderBy;
		}
		if($SQL==""){
	 	 	return "";
	 	}
	 	$LOGGER->addLine('FATAL', $SQL);
	 	if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	    }
	    return BykomCliente::getResultado($mysqli);
    }
  	/**
     * Obtiene las flotas de un Alias
     * @param int $idAlias
     * @param string $orderBy
     * @param int $idRC
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
    function Cuentas_Cliente_Flotas_Alias($idAlias,$orderBy,$idRC){
	     global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	     if (mysqli_connect_errno()){
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	     }
    	 $SQL= "select RTRIM(tlma.NOMBRE_MIX) as sDescription, af.flotaFk as iFlotaId, af.*,abma.ID_RC as idRc
				 from `alias_flota` af
				 inner join tlmapersonas as tlma on tlma.ORDER_ID = af.flotaFk
				 join abmacodigos abma on abma.FLOTA_ID  = af.flotaFk
			     where af.`aliasFk` = ".$idAlias." and (isnull(af.`caduca`) or af.`caduca` >= now())";
    	 if($idRC != null){
    	 	$SQL.= " and abma.ID_RC = $idRC ";
    	 }
    	 $SQL.= " group by sDescription ";

    	if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
    	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
 	 /**
     * Obtiene los RC de un Alias segun el tipo (fijo o movil)
     * @param int $idAlias
     * @param string $orderBy
     * @param int $iObjCuenta
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
    function Cuentas_Cliente_Rc_Alias($idAlias,$orderBy,$iObjCuenta){
	     global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	     if (mysqli_connect_errno()){
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	     }
    	 $SQL= "SELECT RTRIM(rc.NOMBRE) as sDescription, arc.empresaFk as iRCId
				from `alias_rc` arc
				inner join rcmacodigos as rc on rc.ORDER_ID = arc.empresaFk
			    where arc.`aliasFk` = ".$idAlias." and (isnull(arc.`caduca`) or arc.`caduca` >= now())
			    and arc.objetivo = $iObjCuenta ";

    	if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
    	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }

	/**
     * Obtiene los moviles de un alias a partir de un RC y/o una flota.
     * @param int $id
     * @param int $idRc
     * @param int $idFlota
     * @param string $orderBy
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
	function Cuentas_Cliente_Movil_Alias_By_RCAndFlotas($id,$idRc,$idFlota, $orderBy){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     	if (mysqli_connect_errno()){
     	  printf("Conexion fallida: %s\n", mysqli_connect_error());
     	  exit();
     	}
     	$SQL= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido ";
     	if($idRc  && !$idFlota){
			$SQL.= " from `alias_rc` A_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = A_Rc.`empresaFk` and A_Rc.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Rc.`aliasFk` = $id and  (isnull(A_Rc.`caduca`) or A_Rc.`caduca` >= now())
					and  A_Rc.empresaFk = $idRc and ABMA.OBJETIVO = 2 ";
		}else if($idFlota && !$idRc){
			$SQL.= " from `alias_flota` A_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = A_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Flota.`aliasFk` = $id and (isnull(A_Flota.`caduca`) or A_Flota.`caduca` >= now())
				   and  A_Flota.flotaFk = $idFlota and ABMA.OBJETIVO = 2 ";
		}else if($idFlota && $idRc){
			$SQL.= " from `alias_flota` A_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = A_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Flota.`aliasFk` = $id and (isnull(A_Flota.`caduca`) or A_Flota.`caduca` >= now())
				   and  A_Flota.flotaFk = $idFlota and ABMA.ID_RC = $idRc and ABMA.OBJETIVO = 2 ";
		}
		if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
	     return BykomCliente::getResultado($mysqli);
    }
    /**
     * Obtiene los moviles de un alias.
     * @param int $id
     * @param int $iDealerId
     * @param string $orderBy
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
	function Cuentas_Cliente_Movil_DealerAlias($id,$iDealerId, $orderBy){
	 global $LOGGER,$LOGIN;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno()){
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
   		$SQL="";
     	$SQLSELECT = " SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido ";
     	$SQLFROM1="";
	 	if($LOGIN->PERMISOSAlias[21]){//si tiene habilitado movil (habilitarMovil=1)
			$SQLFROM1 = " from `alias_movil` A_Cta
			   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = A_Cta.`movilId` and A_Cta.objetivo = 2
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where A_Cta.`aliasId` = ".$id." and  (isnull(A_Cta.`caduca`) or A_Cta.`caduca` >= now()) ";
			$resultRows = cConfiguracion::getCuentasByAlias($id,2);
			if($resultRows->cantidad()==0){//si no tiene asignada ninguna cuenta se le asigna las del dealer
				  $SQLFROM1 = " from `dealer_cuenta` D_Cta
				   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Cta.`dealerFk` = ".$iDealerId." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
				   and D_Cta.objetivo = 2 ";
			}
			$SQL.= $SQLSELECT;
			$SQL.= $SQLFROM1;
	    }


		$SQLFROM2 = "";
		if($LOGIN->PERMISOSAlias[23]){//si tiene habilitado Empresas (habilitarRC=1)
			if($SQL!=""){
				$SQL.= " UNION ";
			}
			$SQLFROM2 = " from `alias_rc` A_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = A_Rc.`empresaFk` and A_Rc.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Rc.`aliasFk` = ".$id." and  (isnull(A_Rc.`caduca`) or A_Rc.`caduca` >= now())
				   and ABMA.OBJETIVO = 2  ";
			$resultRows =  cConfiguracion::getRCByAlias($id,2);
			if($resultRows->cantidad()==0){//si no tiene asignada ninguna empresa se le asigna las del dealer
				  $SQLFROM2 = " from `dealer_rc` D_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Rc.`dealerFk` = ".$iDealerId." and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
					and ABMA.OBJETIVO = 2 ";
			}
			$SQL.= $SQLSELECT;
			$SQL.= $SQLFROM2;
		}
		if($LOGIN->PERMISOSAlias[22]){//si tiene habilitado Flota (habilitarFlota=1)
			if($SQL!=""){
				$SQL.= " UNION ";
			}
			$SQLFROM3 =" from `alias_flota` A_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = A_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Flota.`aliasFk` = ".$id." and (isnull(A_Flota.`caduca`) or A_Flota.`caduca` >= now())
				   and ABMA.OBJETIVO = 2 ";
			$resultRows =  cConfiguracion::getFlotasByAlias($id);
			if($resultRows->cantidad()==0){
				  $SQLFROM3 = " from `dealer_flota` D_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Flota.`dealerFk` = ".$iDealerId." and (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
				   and ABMA.OBJETIVO = 2  ";
			}
			$SQL.= $SQLSELECT;
			$SQL.= $SQLFROM3;
		}
		if($SQL!=""){
			$SQL	.= " ORDER BY " . $orderBy;
		}
	 	$LOGGER->addLine('FATAL', $SQL);
	 	if($SQL==""){
	 	 	//return new cResultado();
	 	 	return "";
	 	}
     	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
   function Obtener_Order_id($codigocl)
   {
   		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }
        $SQL = "SELECT order_id FROM ABMACODIGOS WHERE CODIGOCL = '$codigocl'";
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Obtener_Direccion_Abreviada($direccion)
    {
    	if (strpos($direccion,"|") === false || strpos($direccion,"Error") !== false) return $direccion;

    	$callePrincipal = substr($direccion, 0 , strpos($direccion,"|"));

        $direccion = substr($direccion, strpos($direccion,"|")+1);

        $calleTipo = substr($direccion,0,strpos($direccion,"|"));

        $direccion = substr($direccion, strpos($direccion,"|")+1);

        $alturaPrincipal = substr($direccion,0,strpos($direccion,"|"));

        $direccion = substr($direccion, strpos($direccion,"|")+1);

        $localidad = substr($direccion,0,strpos($direccion,"|"));

        $direccion = substr($direccion, strpos($direccion,"|")+1);

        $ciudad = $direccion;

        $alturaFormateada = "";

        if (trim($alturaPrincipal) == "-1")
        {
        	$alturaFormateada = "(Sin altura)";
        } else {
        	$alturaFormateada = "N&ordm; ".$alturaPrincipal;
        }

		//format result
		if (trim(strtoupper($callePrincipal)) == 'SIN DATOS')
			$result = $localidad.' - '.$ciudad;
		else if (trim(strtoupper($calleTipo)) == 'RUTA'){
				if (((int)$alturaPrincipal) > 0)
					$result = $callePrincipal.' KM '.$alturaPrincipal.' - '.$localidad.' '.$ciudad;
				else
					$result = $callePrincipal.' KM S/D - '.$localidad.' '.$ciudad;
			 }
			 else
			    $result = $callePrincipal." ".$alturaFormateada. " - ".$localidad." - ".$ciudad;

        return $result;


    }
    /**********************************************************************/
    function Obtener_Palabra_Validez($validez)
    {

    	$result = "";
    	if ($validez > 255)
    	{
    		$result = "INVALIDO";
    	}
    	else
    	{
    		$result = "VALIDO";
    	}

    	return $result;

    }
    /**********************************************************************/
    function Obtener_Palabra_Sentido($sentido)
    {

    	$result = "";
    	if ($sentido >= 22 && $sentido <= 67)
    	{
    		$result = "NORESTE";
    	}
        if ($sentido >= 68 && $sentido <= 112)
    	{
    		$result = "ESTE";
    	}
    	if ($sentido >= 113 && $sentido <= 157)
    	{
    		$result = "SURESTE";
    	}
    	if ($sentido >= 157 && $sentido <= 202)
    	{
    		$result = "SUR";
    	}
    	if ($sentido >=203  && $sentido <= 247)
    	{
    		$result = "SUROESTE";
    	}
    	if ($sentido >= 248 && $sentido <= 292)
    	{
    		$result = "OESTE";
    	}
    	if ($sentido >= 293 && $sentido <= 337)
    	{
    		$result = "NOROESTE";
    	}
    	if (($sentido >= 338 && $sentido <= 360) || (($sentido >= 0 && $sentido <= 21)))
    	{
    		$result = "NORTE";
    	}

		return $result;
    }
    /**********************************************************************/
    function Obtener_Imagen_Sentido($velocidad, $sentido)
    {

    	if ($sentido >= 22 && $sentido <= 67)
    	{
    		$imagenSentido = "flecha_ne";
    	}
        if ($sentido >= 68 && $sentido <= 112)
    	{
    		$imagenSentido = "flecha_e";
    	}
    	if ($sentido >= 113 && $sentido <= 157)
    	{
    		$imagenSentido = "flecha_se";
    	}
    	if ($sentido >= 157 && $sentido <= 202)
    	{
    		$imagenSentido = "flecha_s";
    	}
    	if ($sentido >=203  && $sentido <= 247)
    	{
    		$imagenSentido = "flecha_so";
    	}
    	if ($sentido >= 248 && $sentido <= 292)
    	{
    		$imagenSentido = "flecha_o";
    	}
    	if ($sentido >= 293 && $sentido <= 337)
    	{
    		$imagenSentido = "flecha_no";
    	}
    	if (($sentido >= 338 && $sentido <= 360) || (($sentido >= 0 && $sentido <= 21)))
    	{
    		$imagenSentido = "flecha_n";
    	}

	    if ($velocidad <> 0)
	    {
			$imagenSentido = $imagenSentido."_M";
	    }
		$imagenSentido = $imagenSentido.".bmp";
		return $imagenSentido;
    }
    /**********************************************************************/
    function Delete_Path_Mapa($lcPath)
    {
        /*echo "path: ".$lcPath;
        echo "path2: ".ROOT_DIR_MAPS."/".basename($lcPath);
        echo "pathComp: ".MAPS."/".basename($lcPath);*/
    	if ($lcPath <> '')
    	{
    		$baseName = basename($lcPath);
        	if ($baseName <> '')
        	{
    			//echo "Borrando mapa1: ".ROOT_DIR_MAPS."/".$baseName;
        		//echo "Borrando mapa2: ".ROOT_DIR_MAPS_DLL."/".$baseName;
    			unlink(ROOT_DIR_MAPS."/".$baseName);
        		unlink(ROOT_DIR_MAPS_DLL."/".$baseName);
        	}
    	}
    	return ;

    }
    /**********************************************************************/
    function Obtener_Path_Mapa($lcPath)
    {
        /*echo "path: ".$lcPath;
        echo "path2: ".ROOT_DIR_MAPS."/".basename($lcPath);
        echo "pathComp: ".MAPS."/".basename($lcPath);*/


        if (copy($lcPath,ROOT_DIR_MAPS."/".basename($lcPath)))
    	{
    		$result = MAPS."/".basename($lcPath);

    	}
    	else
    	{
    		$result = PATH_FOTO_MAPA_DEFAULT;
       	}

       return $result;

    }
    /**********************************************************************/
    function Generar_Mapa_Historico($cuenta,$fechai,$fechaf,$zoom,$centroX,$centroY)
    {

    	/*$omapservermap = new COM("MapServer.Mapa");
     	$consultaImagenAVL = BykomCliente::Consulta_Imagen_Avl($cuenta);

     	$imagenVehiculo = $consultaImagenAVL->campo('imagen',0);
        $alto = ALTO_AVL;
        $ancho = ANCHO_AVL;
        $zoom = ZOOM_AVL;
        $calidad = CALIDAD_AVL;
        $ds = DS_AVL;
        $user = USER_AVL;
        $pass = PASSWORD_AVL;
        $bool = 'True';
        if ($centroX == '' || $centroY == '')
        {
        	$centroX = '';
        	$centroY = '';
        }
        $lcPath = $omapservermap->HistoricoMapaWeb($cuenta,$fechai, $fechaf, $ds, $user, $pass, $zoom, $calidad, $imagenVehiculo, $alto, $ancho, $bool, $centroX, $centroY);
        //$lcPath = BykomCliente::Obtener_Path_Mapa($lcPath);
    	return $lcPath;*/
    	return -1;
    }

    /**********************************************************************/
    function Generar_Mapa_Simple($omapservermap,$cuenta,$latitud,$longitud,$velocidad,$sentido, $centroX, $centroY, $zoom)
    {


    	$consultaImagenAVL = BykomCliente::Consulta_Imagen_Avl($cuenta);

    	$imagenVehiculo = $consultaImagenAVL->campo('imagen',0);


    	$velInt = intval($velocidad);
    	$senInt = intval($sentido);
    	$imagenSentido = BykomCliente::Obtener_Imagen_Sentido($velInt,$senInt);
        $alto = ALTO_AVL;
        $ancho = ANCHO_AVL;
        $calidad = CALIDAD_AVL;

    	$omapservermap->AgregarIconoWeb($latitud,$longitud, $imagenVehiculo,$zoom,$calidad, $ancho, $alto);
    	$omapservermap->AgregarIconoWeb($latitud, $longitud, $imagenSentido,$zoom, $calidad, $ancho, $alto);

    	//para que tome centro
    	$imagenVacia = 'popopo';
    	$omapservermap->AgregarIconoWeb($centroX, $centroY, $imagenVacia,$zoom, $calidad, $ancho, $alto);



    }


    /**********************************************************************/
    function Consulta_Distancia_Total_Avl($consulta)
    {
      //$omapservermap = new COM("MapServer.Direccion");
      $result = 0;
      if ($consulta->cantidad() > 1)
      {
      	$R = 6371;
      	$totalPuntos = 1;
	  	$last = 0;
	  	$auxi = "";
		while ($last < $consulta->cantidad() && ($consulta->campo('EDAD_MENSAJE',$last)>=255
												 || $consulta->campo('EDAD_MENSAJE',$last) < 0
												 || $consulta->campo('LATITUD',$last) == '0'
												 || $consulta->campo('LONGITUD',$last) == '0'))
		{
				$last++;
		}

      	for($i=$last; $i<$consulta->cantidad(); $i++)
      	{
			if ($consulta->campo('EDAD_MENSAJE',$i)>=255
					|| $consulta->campo('EDAD_MENSAJE',$i) < 0
					|| $consulta->campo('LATITUD',$i) == '0'
					|| $consulta->campo('LONGITUD',$i) == '0')
					{
						continue;
					}

      			$lat1 = quitCero($consulta->campo('LATITUD',$last));
      			$lon1 = quitCero($consulta->campo('LONGITUD',$last));
   				$lat2 = quitCero($consulta->campo('LATITUD',$i));
   				$lon2 = quitCero($consulta->campo('LONGITUD',$i));
      			/*Pitagoras*/
      			/*$aux = sqrt(pow($lat1 - $lat2, 2) + pow($lon1 - $lon2, 2));
      			$aux = $aux * 100;
      			$aux = round($aux, 4);
      			$result = $result + $aux;*/
      			//$auxi .= "<br>" . $lat1 . " ," . $lon1 ." | " . $lat2 . " , " .$lon2 ." -----> ". $aux;
      			//$last = $i;
      			/*Curvatura*/
      			$dLat = ($lat1-$lat2) * (pi() / 180);
      			$dLon = ($lon1-$lon2) * (pi() / 180);
      			$a = pow(sin($dLat/2),2) +
      			 	cos($lat1 * pi()/180) * cos($lat2 * pi()/180) *
      			 	pow(sin($dLon/2),2);
      			$c = 2 * atan2(sqrt($a), sqrt(1-$a));
      			$aux = $R * $c;
      			$result = $result + $aux;
      			$last = $i;
      			$totalPuntos++;

      	}
      }
      //return $auxi;
      //$result = $result * 100;
      $result = round($result, 3);
      $resultString = (string) $result;
      $resultString = str_ireplace(".", ",", $resultString);
      //$result = substr($result, 0, strpos($result, ',')+4);
      return $resultString;
    }
    /**********************************************************************/
    function calcularDistancia($consulta, $i)
    {
      $result = 0;
      $lat1 = quitCero($consulta->campo('LATITUD',$i));
      $lon1 = quitCero($consulta->campo('LONGITUD',$i));
      $lat2 = quitCero($consulta->campo('LATITUD',$i + 1));
      $lon2 = quitCero($consulta->campo('LONGITUD',$i + 1));
      $aux = sqrt(pow($lat1 - $lat2, 2) + pow($lon1 - $lon2, 2));
      $result = $result + $aux;
      $result = $result * 100;
      $result = str_replace(".", ",", substr($result, 0, strpos($result, '.')+4));
      return $result;
    }
    /**********************************************************************/
    function Consulta_Datos_Identificacion_Avl($order_id)
    {
		global $LOGGER;
    	$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }
        $SQL = "call z_Consulta_Datos_Identificacion_Avl('$order_id')";
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Imagen_Avl($order_id)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $SQL = "call z_Obtener_Imagen_Avl('$order_id')";
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_PosicionSeleccionada_Avl($order_id, $tabla)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $SQL = "call Consulta_PosicionSeleccionada_Avl('$order_id','$tabla')";
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_PosicionActual_Avl($order_ids)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }
        //$SQL = "call z_Consulta_PosicionActual_Avl('$order_id')";
        $SQL = "SELECT ps.ORDER_RL as idMovil,
					   ps.APROXIMACION as direccion,
              		   ps.LATITUD as latitud,
              		   ps.LONGITUD as longitud,
                       ps.SENTIDO as sentido,
              		   ps.VELOCIDAD as velocidad,
              		   ps.SATELITES as satelites,
                       ps.EVENTO as evento,
              		   ps.EVENTO as eventoDesc,
                       ps.EDAD_MENSAJE as validez,
              		   ps.FECHA_MENSAJE as fechaMensaje,
              		   ps.STATUS_ZONA as statusZona,
              		   ps.ODOMETRO_PARCIAL as odometroParcial,
              		   ps.ODOMETRO_TOTAL as odometroTotal,
              		   ps.REVOLUCIONES as rpm,
        			   ps.CONTACTO as contacto,
        			   ps.ALIMENTACION as alimentacion,
        			   ps.BAT1 as bateriaPrincipal,
        			   ps.BAT2 as bateriaSecundaria,
              		   poma.NOMBRE as zonaProhibida
                 from posi_actual ps
                 INNER JOIN abmacodigos abma on abma.ORDER_ID = ps.ORDER_RL
                 LEFT JOIN pomapoligonos poma on poma.ORDER_ID = ps.ID_ZONA
              	 where ps.ORDER_RL IN (".$order_ids.")";
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Historico_Avl($order_id,$fechaInicio,$fechaFin,$iniPaginacion,$contar, $contar2)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $SQL = "call z_genera_reporte_wab('$fechaInicio','$fechaFin','$order_id',".RESULTADO_HISTORICO_AVL.",'$iniPaginacion','$contar','$contar2')";
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Historico_Avl_QCeros($order_id,$fechaInicio,$fechaFin,$iniPaginacion,$contar, $contar2)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }
        $SQL = "call z_genera_reporte_wab_qceros('$fechaInicio','$fechaFin','$order_id',".RESULTADO_HISTORICO_AVL.",'$iniPaginacion','$contar','$contar2')";
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Historico_Avl_Total($order_id,$fechaInicio,$fechaFin)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $SQL = "call z_genera_reporte_wab('$fechaInicio','$fechaFin','$order_id',90000,'0','0','0')";
        //echo " ".$fechaInicio." - ".$fechaFin." ".$order_id;
        //echo " ".$SQL;
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Historico_Avl_Total_QCeros($order_id,$fechaInicio,$fechaFin)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $SQL = "call z_genera_reporte_wab_qceros('$fechaInicio','$fechaFin','$order_id',90000,'0','0','0')";
        //echo " ".$fechaInicio." - ".$fechaFin." ".$order_id;
        //echo " ".$SQL;
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Evento($cuenta, $fechai, $fechaf, $limitacion, $tipo, $iniPaginacion, $contar)
    {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
//		$SQL = "call z_consulta_evento_bis('$cuenta','$fechai','$fechaf','$limitacion','$tipo',".RESULTADO_EVENTOS.",'$iniPaginacion','$contar')";
		// TOMAMOS "DETALLE", "FECHAHORA", "ZONA-USUARIO" Y "CODIGOALFA" DE LOS EVENTOS
		$SQL = "	SELECT	EVMA.`DETALLE` AS `Detalle`,
							EVMA.`FECHAHORA` AS `FECHA_MENSAJE`,
							EVMA.`ZON_US` AS `Zona-Usuario`,
							ALMA.`CODIGOALFA` AS `Evento`
					FROM `evmahistorico` EVMA
					INNER JOIN `almacodigos` ALMA
						ON EVMA.`EVENTO` = ALMA.`ORDER_ID`
					WHERE EVMA.order_rl IN (". $cuenta .")
						AND ( EVMA.fechahora BETWEEN '". $fechai ."' AND '". $fechaf ."' )
						AND ALMA.ver_web = TRUE	";

		// APLICAMOS EL FILTRO DE TIPO DE EVENTOS
		switch( $tipo )
		{
			case 0:	// TODOS
				break;
			case 1:	// EMERGENCIAS
				$SQL .= "	AND ALMA.tipo_senial IN (3, 5, 6)	";
				break;
			case 2:	// NO EMERGENCIAS
				$SQL .= "	AND ALMA.tipo_senial IN (2, 7, 8, 9)	";
				break;
			case 3:	// APERTURAS Y CIERRES
				$SQL .= "	AND ALMA.tipo_senial IN (1, 4)	";
				break;
		}

		$SQL .= "	ORDER BY EVMA.`fechahora`
                    LIMIT ". $iniPaginacion .", ". $limitacion;

		if (!$mysqli->real_query($SQL))
		{
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
			exit();
		}
		return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Evento_Total($cuenta,$fechai,$fechaf,$limitacion,$tipo,$iniPaginacion,$contar)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_consulta_evento_bis('$cuenta','$fechai','$fechaf','$limitacion','$tipo',2000,'$iniPaginacion','$contar')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Zonas($cuenta,$iniPaginacion,$contar)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_consulta_Zona('$cuenta','$iniPaginacion',".RESULTADO_ZONAS.",'$contar')";
     if (!$mysqli->multi_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Zonas_Total($cuenta,$iniPaginacion,$contar)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_consulta_Zona('$cuenta','$iniPaginacion',2000,'$contar')";
     if (!$mysqli->multi_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Usuarios($cuenta,$iniPaginacion,$contar)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_consulta_Usuario('$cuenta','$iniPaginacion',".RESULTADO_USUARIOS.",'$contar')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
  function Consulta_Usuarios_Total($cuenta,$iniPaginacion,$contar)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_consulta_Usuario('$cuenta','$iniPaginacion',2000,'$contar')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
    function Consulta_Contactos($cuenta,$iniPaginacion,$contar)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_consulta_Contacto('$cuenta','$iniPaginacion',".RESULTADO_CONTACTOS.",'$contar')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
    function Consulta_Contactos_Total($cuenta,$iniPaginacion,$contar)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_consulta_Contacto('$cuenta','$iniPaginacion',2000,'$contar')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
  function InfoCuentaAvl($cuentaId)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     //$SQL = "call z_consulta_InfoCuenta('$cuenta')";
     $SQL = "select
       ConcatenarDireccion(
                   Barrio.nombre,
                   calles.`nombre`,
                   CalleEntre.nombre,
                   CalleY.nombre,
                   cast(abmacodigos.`NUMERO` as char),
                   abmacodigos.`PISO`,
                   abmacodigos.`DPTO`,
                   CiudadX.nombre,
                   CiudadX.provincia,
                   CiudadX.pais,
                   abmacodigos.`CODPOSTAL1`,
                   cast(abmacodigos.`codpostal2`as char),
                   abmacodigos.`CODPOSTAL3`,
                   cast(CiudadX.caratelefo as char),
                   abmacodigos.`PANEL_TEL`
                                  )AS dirMonitoreo,
               ConcatenarDireccion(
                   BarrioPago.nombre,
                   CallePago.`nombre`,
                   null,
                   null,
                   cast(abmacodigos.`NUMERO_PAGO` as char),
                   abmacodigos.`PISO_PAGO`,
                   abmacodigos.`DPTO_PAGO`,
                   CiudadXPago.nombre,
                   CiudadXPago.provincia,
                   CiudadXPago.pais,
                   abmacodigos.`CODPOSTAL1_PAGO`,
                   cast(abmacodigos.`CODPOSTAL2_PAGO` as char),
                   abmacodigos.`CODPOSTAL3_PAGO`,
                   null,
                   null
                                 )AS dirPostal,
               TComercio.`nombre` as TComercio,
               TCategoria.nombre as TCategoria ,
               cast(date_format(`abmacodigos`.`AB_ALTA`,'%d/%m/%y') as char) as FechaActivacion,
               elt(abmacodigos.`ENVIAMOVIL`+1,'NO','SI') as EnvMovil,
               elt(abmacodigos.`CONTROLHOR`+1,'NO','ACTIVO') as ControlaHorarios,
               elt(abmacodigos.`VIDEO`+1,'NO','ACTIVO') as Video,
               elt(abmacodigos.`CARTEL`+1,'NO','SI') as Cartel,
               elt(abmacodigos.`AUDIO_DV`+1,'NO','ACTIVO') as Audio,
               abmacodigos.`ENSERVICIO` as Enservicio,
               Estado.Estado as Estado,
               concat(date_format(Estado.ult_dt,'%d/%m/%y %H:%i:%s'),' - ', EstadoCodigo.`CODIGOALFA`,' - ',Estado.ult_dato) as USR, ";

               if (BYKOM_DB_TYPE == 0) {
               	  $SQL .= "Correo.email as CorreoInterno, ";
               	  $SQL .= "ENVReportes.`email` as CorreoReportes, ";
               } else {
                  $SQL .= "abmacodigos.EMAIL_ENV as CorreoInterno, ";
                  $SQL .= "abmacodigos.CODIGOEMAI as CorreoReportes, ";
               }

               $SQL .= "elt(abmacodigos.`AB_TIPADJ`,'\nMicrosoft World','PDF','Texto Plano') as TipoAdjunto,
               rtrim(abmacodigos.ref_domi_m) as Observaciones_m,
               rtrim(abmacodigos.ref_domi_p) as Observaciones_p
               from abmacodigos left join calles on abmacodigos.`CALLE`=calles.`order_id`
                                left join calles as CalleEntre
                                        on CalleEntre.order_id=abmacodigos.`CALLE_ENT1`
                                left join calles as CalleY
                                        on CalleY.order_id=abmacodigos.`CALLE_ENT2`
                                left join calles as CallePago
                                        on CallePago.order_id=abmacodigos.`CALLE_PAGO`
                                left join barrios as Barrio
                                        on abmacodigos.codigobarr=Barrio.codigobarr
                                left join  barrios as BarrioPago
                                        on abmacodigos.`BARRIO`=BarrioPago.codigobarr
                                left join ciudad as CiudadX
                                        on abmacodigos.`CODIGOCIUD`=CiudadX.codigociud
                                left join ciudad as CiudadXPago
                                        on abmacodigos.`CIUD_PAGO`=CiudadXPago.codigociud
                                left join abrltipocategoria as TCategoria
                                        on abmacodigos.`CODIGOCATE`=TCategoria.CODIGOCATE
                                left join abrltipocomercio as TComercio
                                        on abmacodigos.`CODIGOCOM`=TComercio.`codigocom`
                                left join  abrlestados as Estado
                                        on abmacodigos.`ORDER_ID`=Estado.`order_rl`
                                left join almacodigos as EstadoCodigo
                                        on Estado.ult_codigo=EstadoCodigo.`ORDER_ID`
                                left join internet_email as ENVReportes
                                        on abmacodigos.`EMAIL_ENV`=ENVReportes.codigoemai
                                left join internet_email as Correo
                                        on abmacodigos.`CODIGOEMAI`=Correo.codigoemai
               where abmacodigos.order_id= " . $cuentaId;
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
  function InfoCuentaAvlOid($cuentaId)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     //$SQL = "call z_consulta_InfoCuenta_Avl_Oid('$cuenta')";
	 $SQL = "select
			   ' ' AS dirMonitoreo,
               ConcatenarDireccion(
                   BarrioPago.nombre,
                   CallePago.`nombre`,
                   null,
                   null,
                   cast(abmacodigos.`NUMERO_PAGO` as char),
                   abmacodigos.`PISO_PAGO`,
                   abmacodigos.`DPTO_PAGO`,
                   CiudadXPago.nombre,
                   CiudadXPago.provincia,
                   CiudadXPago.pais,
                   abmacodigos.`CODPOSTAL1_PAGO`,
                   cast(abmacodigos.`CODPOSTAL2_PAGO` as char),
                   abmacodigos.`CODPOSTAL3_PAGO`,
                   null,
                   null
                                 )AS dirPostal,
               TComercio.`nombre` as TComercio,
               TCategoria.nombre as TCategoria ,
               cast(date_format(`abmacodigos`.`AB_ALTA`,'%d/%m/%y') as char) as FechaActivacion,
               elt(abmacodigos.`ENVIAMOVIL`+1,'NO','SI') as EnvMovil,
               elt(abmacodigos.`CONTROLHOR`+1,'NO','ACTIVO') as ControlaHorarios,
               elt(abmacodigos.`VIDEO`+1,'NO','ACTIVO') as Video,
               elt(abmacodigos.`CARTEL`+1,'NO','SI') as Cartel,
               elt(abmacodigos.`AUDIO_DV`+1,'NO','ACTIVO') as Audio,
               abmacodigos.`ENSERVICIO` as Enservicio,
               Estado.Estado as Estado,
               concat(date_format(Estado.ult_dt,'%d/%m/%y %H:%i:%s'),' - ', EstadoCodigo.`CODIGOALFA`,' - ',Estado.ult_dato) as 'USR', ";

               if (BYKOM_DB_TYPE == 0) {
               	  $SQL .= "Correo.email as CorreoInterno, ";
               	  $SQL .= "ENVReportes.`email` as CorreoReportes, ";
               } else {
                  $SQL .= "abmacodigos.EMAIL_ENV as CorreoInterno, ";
                  $SQL .= "abmacodigos.CODIGOEMAI as CorreoReportes, ";
               }

               $SQL .= "elt(abmacodigos.`AB_TIPADJ`,'\nMicrosoft World','PDF','Texto Plano') as TipoAdjunto,
               rtrim(abmacodigos.ref_domi_m) as Observaciones_m,
               rtrim(abmacodigos.ref_domi_p) as Observaciones_p,
               rtrim(abmacodigos.`AVL_ANIO`) as Anio,
               rtrim(abmacodigos.`AVL_COLOR`) as Color,
               rtrim(abmacodigos.`AVL_IDENTIFICADOR`) as Identificador,
               rtrim(abmacodigos.`AVL_MARCA`) as Marca,
               RTRIM(`abmacodigos`.`AVL_MODELO`) as Modelo,
               RTRIM(`abmacodigos`.`AVL_PATENTE`) as Patente,
               RTRIM(PosiActual.`APROXIMACION`) as Aproximacion,
               RTRIM(TipoAvl.imagen) as Imagen
               from abmacodigos left join calles on abmacodigos.`CALLE`=calles.`order_id`
                                left join calles as CalleEntre
                                        on CalleEntre.order_id=abmacodigos.`CALLE_ENT1`
                                left join calles as CalleY
                                        on CalleY.order_id=abmacodigos.`CALLE_ENT2`
                                left join calles as CallePago
                                        on CallePago.order_id=abmacodigos.`CALLE_PAGO`
                                left join barrios as Barrio
                                        on abmacodigos.codigobarr=Barrio.codigobarr
                                left join  barrios as BarrioPago
                                        on abmacodigos.`BARRIO`=BarrioPago.codigobarr
                                left join ciudad as CiudadX
                                        on abmacodigos.`CODIGOCIUD`=CiudadX.codigociud
                                left join ciudad as CiudadXPago
                                        on abmacodigos.`CIUD_PAGO`=CiudadXPago.codigociud
                                left join abrltipocategoria as TCategoria
                                        on abmacodigos.`CODIGOCATE`=TCategoria.CODIGOCATE
                                left join abrltipocomercio as TComercio
                                        on abmacodigos.`CODIGOCOM`=TComercio.`codigocom`
                                left join  abrlestados as Estado
                                        on abmacodigos.`ORDER_ID`=Estado.`order_rl`
                                left join almacodigos as EstadoCodigo
                                        on Estado.ult_codigo=EstadoCodigo.`ORDER_ID`
                                left join internet_email as ENVReportes
                                        on abmacodigos.`EMAIL_ENV`=ENVReportes.codigoemai
                                left join internet_email as Correo
                                        on abmacodigos.`CODIGOEMAI`=Correo.codigoemai
                                LEFT JOIN `posi_actual` as PosiActual
                                        on `abmacodigos`.`ORDER_ID` = PosiActual.`ORDER_RL`
                                LEFT JOIN `abrltipoavl` as TipoAvl
                                        on `abmacodigos`.`AVL_TIPO` = TipoAvl.`ORDER_ID`
               where abmacodigos.order_id=" . $cuentaId;

     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
 /**********************************************************************/
    function InfoCuenta($cuenta)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_consulta_InfoCuenta('$cuenta')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function Grupos_Moviles($flotaId)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
     $SQL = "SELECT * FROM grupomovil WHERE grupomovil.`FLOTA_ID` = $flotaId";

     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function Grupos_Moviles_Dealers($cuenta)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
     $SQL = "select ABMA.`FLOTA_ID` as ORDER_ID,
       				TLMA.`NOMBRE` as NOMBRE,
      				TLMA.`DATOS01` as DATOS
			 from `dealer_cuenta` D_Cta
			 inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk`
			 inner join tlmapersonas as TLMA on TLMA.`ORDER_ID` = ABMA.`FLOTA_ID`
			 where D_Cta.`dealerFk` = ".$cuenta." and
      			   (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now()) ";
	 $SQL.= "UNION
			 select ABMA.`FLOTA_ID` as ORDER_ID,
		    		TLMA.`NOMBRE` as NOMBRE,
			        TLMA.`DATOS01` as DATOS
			 from `dealer_rc` D_Rc
			 inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk`
			 inner join tlmapersonas as TLMA on TLMA.`ORDER_ID` = ABMA.`FLOTA_ID`
			 where D_Rc.`dealerFk` = ".$cuenta." and
			       (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now()) ";
	 $SQL.= "UNION
			 select ABMA.`FLOTA_ID` as ORDER_ID,
			        TLMA.`NOMBRE` as NOMBRE,
			        TLMA.`DATOS01` as DATOS
			 from `dealer_flota` D_Flota
			 inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
			 inner join tlmapersonas as TLMA on TLMA.`ORDER_ID` = ABMA.`FLOTA_ID`
			 where D_Flota.`dealerFk` = ".$cuenta." and
				   (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
			 ORDER BY ORDER_ID ";

     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }


 /**********************************************************************/
    function InfoCuentaReduce($cuenta)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_Consulta_InfoCuentaReduce('$cuenta')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
 /**********************************************************************/
    function HorariosCuenta($cuenta)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_Consulta_HorariosCuenta('$cuenta')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
 /**********************************************************************/
    function HorariosCuenta_Ex($cuenta)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_Consulta_HorariosCuenta_Ex('$cuenta')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function HorariosTolerancia($cuenta)
    {
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_Consulta_HorariosTolerancia('$cuenta')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
/**********************************************************************/
 function RecordarPassword($codigorc,$codigocuenta,$particion,$mail)
 {
 	 global $LOGGER;
  	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     $SQL = "call z_Consulta_RecordarPass('$codigorc','$codigocuenta','$particion','$mail')";
     if (!$mysqli->real_query($SQL))
     {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

    /**********************************************************************/
   function Obtener_Descripcion_Alfa($codigoAlfa)
   {
   		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }
        $SQL = "SELECT NOMBRE FROM ALMACODIGOS WHERE CODIGOALFA = '$codigoAlfa'";

        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }

	// FUNCIONES PARA PUNTOS!!!!!
	/**********************************************************************/
    function Puntos_Cliente($clienteId, $esFlota) //siendo clienteID el id de una flota o bien el Id de un Movil
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
     $SQL = "call z_Puntos_Cliente('$clienteId','$esFlota')";
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function Grupos_Cliente($clienteId, $esFlota) //siendo clienteID el id de una flota o bien el Id de un Movil
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL = "call z_Grupos_Cliente('$clienteId','$esFlota')";
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
	 function PersistirPunto($Punto, $oldGrupo) //persiste un objeto del tipo "MisPuntos" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	   $Punto->id=-1;
       return ($Punto);
     }
	 if (($Punto->id=='')||($Punto->id==null)){ //ES UN INSERT
	 	$SQL = "INSERT INTO `pumapuntos` (`NOMBRE`, `LATITUD`, `LONGITUD`, `DATOS`, `FLOTA_ID`, `ICONO`, `SEGURO`, `PUBLICO`, `ESFLOTA`) ";
		$SQL .= "VALUES ('$Punto->nombre', '$Punto->latitud', '$Punto->longitud', '$Punto->datos', $Punto->flotaId, $Punto->icono, $Punto->seguro, $Punto->publico, $Punto->esflota);";
	 }
	 else{
	 	$SQL = "UPDATE `pumapuntos` SET ";
		$SQL .= "pumapuntos.`NOMBRE`='$Punto->nombre', ";
		$SQL .= "pumapuntos.`LATITUD`='$Punto->latitud', ";
		$SQL .= "pumapuntos.`LONGITUD`='$Punto->longitud', ";
		$SQL .= "pumapuntos.`DATOS`='$Punto->datos', ";
		$SQL .= "pumapuntos.`ICONO`=$Punto->icono, ";
		$SQL .= "pumapuntos.`SEGURO`=$Punto->seguro, ";
		$SQL .= "pumapuntos.`PUBLICO`=$Punto->publico ";
		$SQL .= " WHERE pumapuntos.`ORDER_ID` = $Punto->id";
	 }

	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       $mysqli->real_query("ROLLBACK");
	   $Punto->id=-1;
       return ($Punto);
     }
	 if (($Punto->id=='')||($Punto->id==null)) //fue un insert
	 	$Punto->id=$mysqli->insert_id;

	 //AHORA DEBO PERSISTIR LA RELACION GRUPO-PUNTO
	 if ((int)$oldGrupo!=(int)$Punto->grupoId){
	 	if((int)$oldGrupo!=0){
			$SQL = "DELETE FROM grupo_punto WHERE grupo_punto.GRUPO_ID = $oldGrupo and grupo_punto.PUNTO_ID = $Punto->id;";
			if (!$mysqli->real_query($SQL))
     		{
			 $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		 $mysqli->real_query("ROLLBACK");
	  		 $Punto->id=-1;
      		 return ($Punto);
     		}
		}
		else if((int)$Punto->grupoId!=0){
	 		$SQL = "INSERT INTO `grupo_punto` (`GRUPO_ID`, `PUNTO_ID`) VALUES ($Punto->grupoId, $Punto->id);";
	 		if (!$mysqli->real_query($SQL))
     		{
			 $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      		 $mysqli->real_query("ROLLBACK");
	  		 $Punto->id=-1;
      		 return ($Punto);
     		}
		}
	 }

	 $mysqli->real_query("COMMIT");
	 $mysqli->close();
     return ($Punto);
    }

	/**********************************************************************/
	 function PersistirGrupo($Grupo) //persiste un objeto del tipo "MisGrupos" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	   $Grupo->id=-1;
       return ($Grupo);
     }
	 if (($Grupo->id=='')||($Grupo->id==null)){ //ES UN INSERT
	 	$SQL = "INSERT INTO `pumagrupos` (`NOMBRE`, `DATOS`, `FLOTA_ID`, `ESFLOTA`) ";
		$SQL .= "VALUES ('$Grupo->nombre', '$Grupo->datos', $Grupo->flotaId, $Grupo->esflota);";
	 }
	 else{
	 	$SQL = "UPDATE `pumagrupos` SET ";
		$SQL .= "pumagrupos.`NOMBRE`='$Grupo->nombre', ";
		$SQL .= "pumagrupos.`DATOS`='$Grupo->datos' ";
		$SQL .= " WHERE pumagrupos.`ORDER_ID` = $Grupo->id";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       $Grupo->id=-1;
       return ($Grupo);
     }
	 if (($Grupo->id=='')||($Grupo->id==null)) //fue un insert
	 	$Grupo->id=$mysqli->insert_id;
	 $mysqli->close();
     return ($Grupo);
    }

	/**********************************************************************/
	 function PersistirGrupoMovil($Grupo) //persiste un objeto del tipo "GrupoMovil" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	   $Grupo->id=-1;
       return ($Grupo);
     }
	 if (($Grupo->id=='')||($Grupo->id==null)){ //ES UN INSERT
	 	$SQL = "INSERT INTO `grupomovil` (`NOMBRE`, `DATOS`, `FLOTA_ID`, `ES_FLOTA`) ";
		$SQL .= "VALUES ('$Grupo->nombre', '$Grupo->datos', $Grupo->flotaId, $Grupo->esflota);";
	 }
	 else{
	 	$SQL = "UPDATE `grupomovil` SET ";
		$SQL .= "grupomovil.`NOMBRE`='$Grupo->nombre', ";
		$SQL .= "grupomovil.`DATOS`='$Grupo->datos' ";
		$SQL .= " WHERE grupomovil.`ORDER_ID` = $Grupo->id";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       $Grupo->id=-1;
       return ($Grupo);
     }
	 if (($Grupo->id=='')||($Grupo->id==null)) //fue un insert
	 	$Grupo->id=$mysqli->insert_id;
	 $mysqli->close();
     return ($Grupo);
    }

	/**********************************************************************/
	 function PersistirContacto($Contacto) //persiste un objeto del tipo "GrupoMovil" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	   $Contacto->id=-1;
       return ($Contacto);
     }
	 if (($Contacto->id=='')||($Contacto->id==null)){ //ES UN INSERT
	 	$SQL = "INSERT INTO `contacto` (`cuentaFk`, `objetivo`, `nomyapel`, `tipodoc`, `nrodoc`, `direccion`, `telefono1`, `telefono2`, `email`, `observaciones`) ";
		$SQL .= "VALUES ($Contacto->cuentaFk, $Contacto->objetivo, '$Contacto->nomyapel', '$Contacto->tipodoc',";
		$SQL .= " '$Contacto->nrodoc', '$Contacto->direccion', '$Contacto->telefono1', '$Contacto->telefono2',";
		$SQL .= " '$Contacto->email', '$Contacto->observaciones');";
	 }
	 else{
	 	$SQL = "UPDATE `contacto` SET ";
		$SQL .= "contacto.`nomyapel`='$Contacto->nomyapel', ";
		$SQL .= "contacto.`tipodoc`='$Contacto->tipodoc', ";
		$SQL .= "contacto.`nrodoc`='$Contacto->nrodoc', ";
		$SQL .= "contacto.`direccion`='$Contacto->direccion', ";
		$SQL .= "contacto.`telefono1`='$Contacto->telefono1', ";
		$SQL .= "contacto.`telefono2`='$Contacto->telefono2', ";
		$SQL .= "contacto.`email`='$Contacto->email', ";
		$SQL .= "contacto.`observaciones`='$Contacto->observaciones' ";
		$SQL .= " WHERE contacto.`id` = $Contacto->id";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       $Contacto->id=-1;
       return ($Contacto);
     }
	 if (($Contacto->id=='')||($Contacto->id==null)) //fue un insert
	 	$Contacto->id=$mysqli->insert_id;
	 $mysqli->close();
     return ($Contacto);
    }

	/**********************************************************************/
	 function PersistirCuentaContacto($CuentaContacto) //persiste un objeto del tipo "GrupoMovil" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	 	$CuentaContacto->cuenta = -1;
	    return ($CuentaContacto);
     }
	 switch((int)$CuentaContacto->objetivo){
	 	case 3:	$SQL = "UPDATE `tlmapersonas` cta SET ";
				break;
		case 2: $SQL = "UPDATE `abmacodigos` cta SET ";
				break;
		case 5: $SQL = "UPDATE `dealer` cta SET ";
				break;
	 }
	 $SQL .= "cta.`OBSERVACIONES`='$CuentaContacto->observaciones' ";
	 if ((int)$CuentaContacto->objetivo==5)
	 	$SQL .= " WHERE cta.`id` = $CuentaContacto->cuenta";
	 else
		$SQL .= " WHERE cta.`ORDER_ID` = $CuentaContacto->cuenta";
     if (!$mysqli->real_query($SQL))
     {
	    $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	 	$CuentaContacto->cuenta = -1;
        return ($CuentaContacto);
     }
	 $mysqli->close();
     return ($CuentaContacto);
    }

	/**********************************************************************/
	function EliminarContacto($Id) //elimina un contacto segun su ID
	{
		global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     	if (mysqli_connect_errno()) {
	       return ('Error en conexion con DB');
    	}
	 	$SQL = "";
	 	if (($Id!=null)and($Id!='')) {
	 		$SQL = "DELETE FROM contacto WHERE contacto.`id` = $Id";
	 	}
	    if (!$mysqli->real_query($SQL)) {
		    $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       		return ('Se produjo un error al tratar de eliminar el contacto de la base de datos');
     	}
	 	return('OK');
	 }

	/**********************************************************************/
	function EliminarGrupoMovil($Ids) //elimina todos los grupos de moviles, dejando a los moviles con un 0 como grupo base.
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (false);
     }
	 $SQL = "";
	 if (($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM grupomovil WHERE grupomovil.`ORDER_ID` IN  (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }

	if (($Ids!=null)and($Ids!='')){
	 	$SQL = "UPDATE `abmacodigos` SET ";
		$SQL .= "abmacodigos.`GRUPOMOVIL` = 0 ";
		$SQL .= " WHERE abmacodigos.`GRUPOMOVIL` IN (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }
     return (true);
    }

	/**********************************************************************/
	function UpdateGrupoMovil($grupoId, $movilesIds)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (false);
     }

	if (($movilesIds!=null)and($movilesIds!='')){
	 	$SQL = "UPDATE `abmacodigos` SET ";
		$SQL .= "abmacodigos.`GRUPOMOVIL` = $grupoId ";
		$SQL .= " WHERE abmacodigos.`ORDER_ID` IN (".implode(',',$movilesIds).")";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }
     return (true);
    }

	/**********************************************************************/
	function UpdateEstadoMovil($movilId, $estado)
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (false);
     }

	 $SQL = "UPDATE `abmacodigos` SET ";
	 $SQL .= "abmacodigos.`ACTIVO` = $estado ";
	 $SQL .= " WHERE abmacodigos.`ORDER_ID` = $movilId";

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }
     return (true);
    }

	/**************************************************************************************************/
	 function EliminarPuntos($Ids) //elimina todos los puntos de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	    if (mysqli_connect_errno()){
	    	return (false);
	    }
	     //EJECUTO EL PRIMER QUERY
	 	$mysqli->real_query("BEGIN");
		if (($Ids!=null)and($Ids!='')){
		 	$SQL = "DELETE FROM pumapuntos WHERE pumapuntos.`ORDER_ID` IN  (".implode(',',$Ids).")";
		}
	    if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       return (false);
	    }

		if (($Ids!=null)and($Ids!='')){
			$SQL = "DELETE FROM grupo_punto WHERE grupo_punto.`PUNTO_ID` IN  (".implode(',',$Ids).")";
		}
	    if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
		     $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       return (false);
     	}

	 	if(($Ids!=null)and($Ids!='')){
	 		$SQL = "DELETE FROM puntos_visibles WHERE `PUNTO_ID` IN  (".implode(',',$Ids).")";
	 	}
		if (!$mysqli->real_query($SQL)){
	   		$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
			$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       		return (false);
     	}
	 	$mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 	$mysqli->close();
     	return (true);
    }

	 function EliminarGrupos($Ids) //elimina todos los grupos y sus puntos de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (false);
     }
	 if (($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM grupo_punto WHERE grupo_punto.`GRUPO_ID` IN  (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }

	 if (($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM pumagrupos WHERE pumagrupos.`ORDER_ID` IN  (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }

     return (true);
    }

	 function PublicarPuntos($Ids, $publicar) //publica todos los puntos de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	 $value=0;
	 if ($publicar)
	 	$value=1;
     if (mysqli_connect_errno())
     {
       return (-1);
     }
	 if (($Ids!=null)&&($Ids!='')){
	 	$SQL = "UPDATE `pumapuntos` SET pumapuntos.`PUBLICO`=$value WHERE pumapuntos.`ORDER_ID` IN (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (-1);
     }
     return ($value);
    }

	function SeguroPuntos($Ids, $seguro) //marca todos los puntos que esten en el array de Ids como seguro/inseguro y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	 $value=0;
	 if ($seguro)
	 	$value=1;
     if (mysqli_connect_errno())
     {
       return (-1);
     }
	 if (($Ids!=null)&&($Ids!='')){
	 	$SQL = "UPDATE `pumapuntos` SET pumapuntos.`SEGURO`=$value WHERE pumapuntos.`ORDER_ID` IN (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (-1);
     }
     return ($value);
    }

	// FUNCIONES PARA ZONAS!!!!!
	/**********************************************************************/
	function Zonas_Cliente($clienteId, $esFlota) //siendo clienteID el id de una flota o bien el Id de un Movil
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL = "call z_Zonas_Cliente('$clienteId','$esFlota')";
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

	function Puntos_Zona($zonaId) //Retorna todos los puntos de una zona determinada
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL = "call z_Puntos_Zona('$zonaId')";
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
	 function PersistirZona($Zona) //persiste un objeto del tipo "MisZonas" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	   $Zona->id=-1;
       return ($Zona);
     }
	 //POMAPOLIGONOS
	 $SQL = "";
	 $colorDec = hexdec($Zona->color); //convertimos el color de HEXA a DECIMAL
	 if (($Zona->id=='')||($Zona->id==null)){ //ES UN INSERT
		//inserto en POMAPOLIGONOS
	 	$SQL = "INSERT INTO `pomapoligonos` (`NOMBRE`, `DATOS`, `COLOR`, `FLOTA_ID`, `TIPO`, `PUBLICO`, `ESFLOTA`) ";
		$SQL .= "VALUES ('$Zona->nombre', '$Zona->datos', $colorDec, $Zona->flotaId, 2, $Zona->publico, $Zona->esflota);";
	 }
	 else{
	 	$SQL = "UPDATE `pomapoligonos` SET ";
		$SQL .= "pomapoligonos.`NOMBRE`='$Zona->nombre', ";
		$SQL .= "pomapoligonos.`DATOS`='$Zona->datos', ";
		$SQL .= "pomapoligonos.`COLOR`=$colorDec, ";
		$SQL .= "pomapoligonos.`PUBLICO`=$Zona->publico ";
		$SQL .= " WHERE pomapoligonos.`ORDER_ID` = $Zona->id";
	 }


	 //EJECUTO EL PRIMER QUERY
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Zona->id=-1;
       return ($Zona);
     }
	 if (($Zona->id=='')||($Zona->id==null)) //fue un insert
	 	$Zona->id=$mysqli->insert_id;

	 //PUMAPUNTOS
	 $SQL = "DELETE FROM `porlpoligonos` WHERE porlpoligonos.`ORDER_RL`=$Zona->id";
	 if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Zona->id=-1;
       return ($Zona);
     }
	 $SQL = "INSERT INTO `porlpoligonos` (`ORDER_RL`, `LATITUD`, `LONGITUD`) VALUES ";
	 for ($i=0; $i<$Zona->cantidadPuntos(); $i++){
	    $lat = $Zona->PUNTOSLAT[$i];
		$lng = $Zona->PUNTOSLNG[$i];
		$SQL .= "($Zona->id, '$lat', '$lng')";
		if ($i<$Zona->cantidadPuntos()-1)
			$SQL.=",";
		}
	 $SQL.=";";
	 if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Zona->id=-1;
       return ($Zona);
     }

	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA => PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return ($Zona);
    }

	/**************************************************************************************************/
	 function EliminarZonas($Ids) //elimina todas las zonas de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (false);
     }
	 if (($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM porlpoligonos WHERE porlpoligonos.`ORDER_RL` IN  (".implode(',',$Ids).")";
	 }
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if(($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM pomapoligonos WHERE pomapoligonos.`ORDER_ID` IN  (".implode(',',$Ids).")";
	 }
	 if(!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if(($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM zonas_visibles WHERE `ZONA_ID` IN  (".implode(',',$Ids).")";
	 }
	 if(!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return (true);
    }

	 function PublicarZonas($Ids, $publicar) //publica todas las zonas de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	 $value=0;
	 if ($publicar)
	 	$value=1;
     if (mysqli_connect_errno())
     {
       return (-1);
     }
	 if (($Ids!=null)&&($Ids!='')){
	 	$SQL = "UPDATE `pomapoligonos` SET pomapoligonos.`PUBLICO`=$value WHERE pomapoligonos.`ORDER_ID` IN (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (-1);
     }
     return ($value);
    }

/**********************************************************************/
	 function PersistirRegla($Regla) //persiste un objeto del tipo "Regla" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	   $Regla->id=-1;
       return ($Regla);
     }
	 //REGLA
	 $SQL = "";
	 if (($Regla->id=='')||($Regla->id==null)){ //ES UN INSERT
		//inserto en REGLA
	 	$SQL = "INSERT INTO `regla` (`NOMBRE`, `POLIGONOFK`, `DEBEESTAR`, `ESFLOTA`, `FLOTAID`) ";
		$SQL .= "VALUES ('$Regla->nombre', $Regla->zona, $Regla->debeEstar, $Regla->esflota, $Regla->flotaId); ";
		/*if ($Regla->esflota == 1){ //debo obtener el ID de la flota que corresponde con movilId
			$SQL .= "(select abmacodigos.`FLOTA_ID` from abmacodigos where abmacodigos.`ORDER_ID` = ".$Regla->flotaId."));";
			}
		else
			$SQL .= $Zona->flotaId.");";*/
	 }
	 else{
	 	$SQL = "UPDATE `regla` SET ";
		$SQL .= "regla.`NOMBRE`='$Regla->nombre', ";
		$SQL .= "regla.`POLIGONOFK`=$Regla->zona, ";
		$SQL .= "regla.`DEBEESTAR`=$Regla->debeEstar ";
		$SQL .= " WHERE regla.`id` = $Regla->id";
	 }
	 //EJECUTO EL PRIMER QUERY
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Regla->id=-1;
       return ($Regla);
     }
	 if (($Regla->id=='')||($Regla->id==null)) //fue un insert
	 	$Regla->id=$mysqli->insert_id;

	 //FRANJAHORARIA
	 $SQL = "DELETE FROM `franjahoraria` WHERE franjahoraria.`REGLAFK`=$Regla->id";
	 if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Regla->id=-1;
       return ($Regla);
     }

	 $SQL = "INSERT INTO `franjahoraria` (`REGLAFK`, `DIAS`, `HORAINICIO`, `HORAFIN`) VALUES ";

	 for ($i=0; $i<$Regla->cantidadFranjas(); $i++){
	    $franja = $Regla->FRANJAS[$i];
		$horaIni = $franja[7];
		$horaFin = $franja[8];
		$dias = "";
		$comma = "";
		for ($j=0; $j<7; $j++){//domingo a sabado
			if (trim($franja[$j])=="true"){
			    $dias .= $comma.($j+1);
				$comma = ",";
				}
			}
		$SQL .= "($Regla->id, '$dias', '$horaIni', '$horaFin')";
		if ($i<$Regla->cantidadFranjas()-1)
			$SQL.=",";
	 }
	 $SQL.=";";
	 if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Regla->id=-1;
       return ($Regla);
     }

	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return ($Regla);
    }

	/**************************************************************************************************/
   function EliminarReglas($Ids) //elimina todas las reglas de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (false);
     }
	 if (($Ids!=null)and($Ids!='')){
	 	//FRANJAHORARIA
		$SQL = "DELETE FROM `franjahoraria` WHERE franjahoraria.`REGLAFK` IN  (".implode(',',$Ids).")";
	 }
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if (($Ids!=null)and($Ids!='')){
	    //REGLAS
	 	$SQL = "DELETE FROM `regla_movil` WHERE `reglaFk` IN  (".implode(',',$Ids).")";
	 }
	 if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if (($Ids!=null)and($Ids!='')){
	    //REGLAS
	 	$SQL = "DELETE FROM `regla` WHERE regla.`ID` IN  (".implode(',',$Ids).")";
	 }
	 if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }


	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return (true);
    }

	/**********************************************************************/
	function Reglas_Cliente($cuenta, $esflota){ //retorna una lista de reglas
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);

     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
     $SQL = " select regla.`id`, regla.`debeEstar`, regla.`esFlota`, regla.`flotaID`, regla.`nombre`, regla.`poligonoFK` from regla ";
 	 $SQL .="where (regla.`flotaID` = $cuenta AND regla.`esFlota` = $esflota) ORDER BY `regla`.`id`";
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function Reglas_Franjas($reglaId){ //retorna una lista de franjas dado una reglaId, ordenada por ID de franja
	$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
     $SQL = "SELECT * from `franjahoraria` where `franjahoraria`.`reglaFK`=$reglaId";
     if (!$mysqli->real_query($SQL))
     {
       printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function AplicarRegla($ReglaId, $MovilesIds){ //Aplica una regla a una lista de moviles, y retorna $MovilesIds. Si no puede retorna -1
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (-1);
     }

	 //REGLA-MOVIL
	 $SQL = "DELETE FROM `regla_movil` WHERE regla_movil.`REGLAFK`=$ReglaId";
	 //EJECUTO EL PRIMER QUERY
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
	 if (!$mysqli->real_query($SQL))
     {
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	   return (-1);
     }

	 if(count($MovilesIds)>0) {
		 //INSERTO LAS NUEVAS RELACIONES
		 $SQL = "INSERT INTO `regla_movil` (`REGLAFK`, `MOVILFK`) VALUES ";

		 for ($i=0; $i<count($MovilesIds); $i++){
		    $movilId = $MovilesIds[$i];
			$SQL .= "($ReglaId, $movilId)";
			if ($i<count($MovilesIds)-1)
				$SQL.=",";
		 }
		 $SQL.=";";

		 if (!$mysqli->real_query($SQL))
    	 {
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
    	   return (-1);
	     }
	 }

	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return ($MovilesIds);
	}
	/**********************************************************************/
	function Reglas_Moviles($reglaId){ //retorna una lista de relaciones regla_movil dado una reglaId
	$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
     $SQL = "SELECT * from `regla_movil` where `regla_movil`.`reglaFK`=$reglaId";
     if (!$mysqli->real_query($SQL))
     {
       printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/*******************************************************************************************************/
	function Monitor_Eventos($cuentaId, $esFlota, $Ids, $lastIdWeb, $lastIdByk, $limit) //Retorna todos los eventos de una lista de Ids de cuentas, desde el $lastIdWeb y el $lastIdByk;
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }

	 if (trim($Ids)!=''){
	     //$SQL = "call z_Consulta_Historico_Mix_new($cuentaId, $esFlota, '$Ids', $lastIdWeb, $lastIdByk, $limit);";
	     
     	 $SQLSelect =	"select ev.`ORDER_ID` id,
           			    ab.`NOMBRE` cuenta,
                        ab.`ORDER_ID` cuentaId,
                        al.`CODIGOALFA` codigoAlfa,
                        ev.`DETALLE` detalle,
                        ev.`TIPOCEDU` tipocedu,
                        ev.`PROCESADO` procesado,
                        ev.`DATOS` datos,
                        ev.`HIST_RL` historicoFk,
                        ev.`LATITUD` latitud,
                        ev.`LONGITUD` longitud,
                        ev.`FECHAHORA` fecha,";
     	 
		$SQLInner= " INNER JOIN abmacodigos ab
                        ON ab.ORDER_ID = ev.ORDER_RL
                LEFT JOIN almacodigos al
                        ON al.ORDER_ID = ev.EVENTO
	            LEFT OUTER JOIN `eventos_visibles` e_v ON e_v.`EVENTO_ID`=ev.EVENTO AND 
						e_v.`ES_FLOTA`=".$esFlota." AND 
                        e_v.`CUENTA_ID`=".$cuentaId." ";
                        
		$SQLWhere1= " WHERE  ev.`ORDER_RL` IN (".$Ids.") 
                              AND ev.PROCESADO=0 
                              AND al.`VER_WEB`=1 
                              AND al.`ADM_WEB`=1 
                              AND ( (e_v.`TIPO_ALERTA`=1) OR ( (e_v.`TIPO_ALERTA` IS NULL ) AND (al.`TIPO_ALERTA`=1) ) ) 
                              AND ev.`ORDER_ID` NOT IN( select el.eventoId from eventos_locks el where NOT(el.cuentaId=".$cuentaId." and el.objetivo=".$esFlota.") 
                              				and el.tipoTabla = 1 ) ";
		$SQLWhere2= " WHERE  ev.`ORDER_RL` IN (".$Ids.") 
                              AND ev.PROCESADO=0 
                              AND al.`VER_WEB`=1 
                              AND al.`ADM_WEB`=1 
                              AND ( (e_v.`TIPO_ALERTA`=1) OR ( (e_v.`TIPO_ALERTA` IS NULL ) AND (al.`TIPO_ALERTA`=1) ) ) 
                              AND ev.`ORDER_ID` NOT IN( select el.eventoId from eventos_locks el where NOT(el.cuentaId=".$cuentaId." and el.objetivo=".$esFlota.") 
                              				and el.tipoTabla = 2 ) ";
                                    
		$SQL =  "(".$SQLSelect." 0 as tipoWeb from evmahistorico ev ".$SQLInner.$SQLWhere1."  ) UNION ( ".$SQLSelect." 1 as tipoWeb ".
                   "from evmahistorico_wc ev ".$SQLInner.$SQLWhere2."  AND ev.REGLAFK IN (select id from regla RG where RG.flotaID =".$cuentaId." and RG.esFlota=".$esFlota.")".
                   ") ORDER BY fecha ASC LIMIT ".$limit.";";
    	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     		}
		}

     return BykomCliente::getResultado($mysqli);
    }

	/*******************************************************************************************************/
	function Monitor_Evento_byId($eventoId, $esWeb) //Retorna un evento dado su id y su pertenecia(es web o no);
	{
		global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     	if (mysqli_connect_errno())
     	{
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "call z_Consulta_Historico_Mix_uniqueEvent($eventoId, $esWeb);";
   	 	if (!$mysqli->real_query($SQL))
   		{
   			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
   			exit();
		}
     	return BykomCliente::getResultado($mysqli);
    }

	/*******************************************************************************************************/
	function unlock_eventosByCuenta($cuentaId, $objetivo ,$user,$tipoTabla){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	    if (mysqli_connect_errno()){
	      printf("Conexion fallida: %s\n", mysqli_connect_error());
	      return false;
	    }
	    $SQL = "DELETE FROM eventos_locks WHERE cuentaId = $cuentaId AND objetivo = $objetivo and tipoTabla=$tipoTabla";
		if (!$mysqli->real_query($SQL)){
		       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
		       return false;
	   	}
	   	return true;
	}
	
	function unlock_eventos($idEventosWC, $idEventosBY,$user){
	 	global $LOGGER;
	 	echo "aaaaa";
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	    if (mysqli_connect_errno()){
	      printf("Conexion fallida: %s\n", mysqli_connect_error());
	      return false;
	    }
	    if($idEventosWC != ""){
		   echo $SQL = "DELETE FROM eventos_locks WHERE eventoId IN($idEventosWC) and tipoTabla=2";
		 	if (!$mysqli->real_query($SQL)){
		       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
		       return false;
	    	}
	    }
	    if($idEventosBY != ""){
		    echo$SQL = "DELETE FROM eventos_locks WHERE eventoId IN($idEventosBY) and  tipoTabla=1";
		 	if (!$mysqli->real_query($SQL)){
		       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
		       return false;
		    }
	    }
		return true;
	}
	function Procesar_Evento($idEventosWC, $idEventosBY, $procesado, $user, $datos, $concatena) //Marca un evento como procesado
	{
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	     if (mysqli_connect_errno()) {
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       return false;
	     }
	     $SQL = "call z_procesar_Evento('$idEventosWC', '$idEventosBY', $procesado, '$user', '$datos', $concatena)";
	   
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	       return false;
	     }
    	//if(unlock_eventos($idEventosWC, $idEventosBY,$user)){
    	return true;
    }
    
    function consultar_eventosLock($idEventosWC, $idEventosBY,$cuentaId, $objetivo ,$user,$tipoTabla){
    	global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	    if (mysqli_connect_errno()){
	      printf("Conexion fallida: %s\n", mysqli_connect_error());
	      return false;
	    }
	    if($idEventosWC == "" && $idEventosBY == ""){
	    	return false;
	    }
	    /**
	     * 
	     * consulta los bloqueados segun los IDS que se le pasa como parametro que no son propios
	     */
	    $SQL = "SELECT eventoId, 
						cuentaId, 
						objetivo, 
						username, 
						fecha, 
						tipoTabla
					 FROM eventos_locks
					 WHERE ";
    	if($idEventosWC!=""){
    		$SQL.="(eventoId IN ($idEventosWC) AND tipoTabla=2 AND  NOT(cuentaId = $cuentaId AND objetivo = $objetivo) )";
    	}
    	if($idEventosBY!=""){
    		if($idEventosWC!=""){
				$SQL.= " OR ";
    		}
			$SQL.= "(eventoId IN ($idEventosBY) AND tipoTabla=1 AND  NOT(cuentaId = $cuentaId AND objetivo = $objetivo) )";
    	}
	    	
	 	if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	       return false;
	    }
	    return BykomCliente::getResultado($mysqli);
    	
    }
    
	/**
	 * blockea los registros insertandolos en la tabla eventos_locks
	 */
    function lock_eventos($idEventosWC, $idEventosBY,$cuentaId, $objetivo ,$user){
    	 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	     if (mysqli_connect_errno())
	     {
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       return false;
	     }
	     $vIdEventosWC=array();
	     $vIdEventosBY=array();
	     if($idEventosWC!=""){
	     	$vIdEventosWC = explode(",",$idEventosWC);
	     }
	     if($idEventosBY!=""){
	     	$vIdEventosBY = explode(",",$idEventosBY);
	     }
	     $SQL = "INSERT INTO eventos_locks (eventoId,cuentaId,objetivo,username,fecha,tipoTabla)
						VALUES ";
         for ($i=0; $i<count($vIdEventosWC); $i++){
		    $evId = $vIdEventosWC[$i];
			$SQL .= "($evId, $cuentaId,$objetivo,'$user',now(),2)";
			if ($i < count($vIdEventosWC)-1){
				$SQL.=",";
			}
		 }
	     for ($i=0; $i<count($vIdEventosBY); $i++){
		    $evId = $vIdEventosBY[$i];
			$SQL .= "($evId, $cuentaId,$objetivo,'$user',now(),1)";
			if ($i < count($vIdEventosBY)-1){
				$SQL.=",";
			}
		 }
		echo $SQL.=";";
	     if (!$mysqli->real_query($SQL))
	     {
	       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	       return false;
	     }
		 return true;
    }
	/*************************************************************************************/
	function PersistirComando($Comando) //persiste un objeto del tipo "Comando" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	   $Comando->id=-1;
       return ($Comando);
     }
	 //ENVIO_COMANDOS
	 $SQL = "";
	 if (($Comando->id=='')||($Comando->id==null)){ //ES UN INSERT
		//inserto en ENVIO_COMANDOS
	 	$SQL = "INSERT INTO `envio_comandos` (`ORDER_RL`,`ID_VEHICULO`,`COMANDO`,`ESTADO`,`RECEPTORA`,`TERMINAL`) ";
		$SQL .= "VALUES ($Comando->cuenta, $Comando->movilId, '$Comando->comando' ,$Comando->estado,";
		$SQL .= "$Comando->receptora, '$Comando->terminal');";
	 }
	 else{
	 	$SQL = "UPDATE `envio_comandos` SET ";
		$SQL .= "envio_comandos.`ORDER_RL`='$Comando->cuenta, ";
		$SQL .= "envio_comandos.`ID_VEHICULO`=$Comando->movilId, ";
		$SQL .= "envio_comandos.`COMANDO`='$Comando->comando', ";
		$SQL .= "envio_comandos.`ESTADO`=$Comando->estado,";
		$SQL .= "envio_comandos.`RECEPTORA`=$Comando->receptora, ";
		$SQL .= "envio_comandos.`TERMINAL`='$Comando->terminal'";
		$SQL .= " WHERE envio_comandos.`ORDER_ID` = $Comando->id";
	 }

	 //EJECUTO EL QUERY
     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       $Comando->id=-1;
       return ($Comando);
     }
	 if (($Zona->id=='')||($Zona->id==null)) //fue un insert
	 	$Comando->id=$mysqli->insert_id;

	 $mysqli->close();
     return ($Comando);
    }

	/****************************************************************************/
	function RecibirComandos($envioIds){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL =  "SELECT rc.* ";
	  $SQL .= "FROM `resp_comandos` rc ";
	  $SQL .= "WHERE rc.`ORDER_RL_ENV` IN (".implode(',',$envioIds).")";
     	if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}
	/****************************************************************************/
	function persistirKeepAlive($cuentaId, $objetivo, $live){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
     $direccionRemota = $_SERVER['REMOTE_ADDR'];
     $SQL = "call z_KeepAlive($cuentaId, $objetivo, '$direccionRemota', $live)";
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/****************************************************************************/
	function Eventos_Cliente($cuentaId, $esFlota, $descripcionFil){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL =  "SELECT ac.*, ";
      $SQL .= "if(ev.`TIPO_ALERTA` is null,ac.`TIPO_ALERTA`,ev.`TIPO_ALERTA`) as TIPO_ALERTA_CLIENTE ";
	  $SQL .= "FROM `almacodigos` ac ";
	  $SQL .= "LEFT OUTER JOIN `eventos_visibles` ev ON ev.`EVENTO_ID`=ac.`ORDER_ID` AND ";
      $SQL .= "                                   ev.`ES_FLOTA`=".$esFlota." AND ";
      $SQL .= "                                   ev.`CUENTA_ID`=" .$cuentaId;
	  $SQL .= " WHERE ac.`ADM_WEB`=1 ";
	  $SQL .= "   AND ac.`VER_WEB`=1 ";
	  if (($descripcionFil!=NULL)&&(trim($descripcionFil)!=''))
	  		$SQL .= "   AND ac.`NOMBRE` LIKE '%".$descripcionFil."%' ";
	  $SQL .= " ORDER BY ac.`NOMBRE` ";

     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function Resoluciones_Cliente($cuentaId, $esFlota, $nombreFil){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL =  "SELECT rr.* ";
	  $SQL .= "FROM `resolucionrapida` rr ";
	  $SQL .= "WHERE rr.esFlota = " . $esFlota . " AND rr.cuentaId = " . $cuentaId;
	  if (($nombreFil!=NULL)&&(trim($nombreFil)!=''))
	  		$SQL .= " AND rr.`nombre` LIKE '%".$nombreFil."%' ";
	  $SQL .= " ORDER BY rr.`nombre` ";

     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	 function PersistirMensaje($Mensaje) //persiste un objeto del tipo "Mensaje" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
	   $Mensaje->id=-1;
	   $Mensaje->mensaje="Fallo al intentar conectarse a la DB";
       return ($Mensaje);
     }
     // SIEMPRE ES UN INSERT
	 	$SQL = "INSERT INTO `mensaje` (`origen`, `labelOrigen`, `destino`, `labelDestino`, `objetivo`, `leido`, `mensaje`) ";
		$SQL .= "VALUES ($Mensaje->origen, '$Mensaje->labelOrigen', $Mensaje->destino, '$Mensaje->labelDestino', $Mensaje->objetivo, 0, '$Mensaje->mensaje');";

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
	   $Mensaje->id=-1;
	   $Mensaje->mensaje="Fallo al intentar insertar el mensaje enviado en la DB de destino.";
       return ($Mensaje);
     }

	 $Mensaje->id=$mysqli->insert_id;
	 $mysqli->close();
     return ($Mensaje);
	}

	/****************************************************************************/
	function Consulta_Datos_Contacto_Cuenta_Avl($cuentaId, $objetivo){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
	  if ((int)$objetivo==5)
	  	  $SQL =  "SELECT concat(cta.`NOMBRE`,' ',cta.`APELLIDO`) as NOMBRE, ";
	  else
	  	  $SQL =  "SELECT cta.NOMBRE, ";
	  $SQL .=  "if(cta.OBSERVACIONES is null,'', cta.OBSERVACIONES) as OBSERVACIONES ";
	  switch((int)$objetivo){
	  	case 2: $SQL .= "FROM `abmacodigos` cta ";
				break;
	  	case 3: $SQL .= "FROM `tlmapersonas` cta ";
				break;
		case 5: $SQL .= "FROM `dealer` cta ";
				break;
	  }
	  if ((int)$objetivo==5)
	  	  $SQL .= " WHERE cta.`id` = ".$cuentaId;
	  else
		  $SQL .= " WHERE cta.`ORDER_ID` = ".$cuentaId;
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}
	/****************************************************************************/
	function Consulta_Datos_Contacto_Avl($cuentaId, $objetivo){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL =  "SELECT * ";
	  $SQL .= "FROM `contacto` con ";
	  $SQL .= " WHERE con.`cuentaFk` = ".$cuentaId." AND ";
	  $SQL .= "       con.`objetivo` = ".$objetivo;
	  $SQL .= " ORDER BY con.`id` ";
	  $LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/****************************************************************************/
	function Consultar_Mensajes($cuentaId, $objetivo){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL =  "SELECT * ";
	  $SQL .= "FROM `mensaje` msg ";
	  $SQL .= " WHERE msg.`destino` = ".$cuentaId." AND ";
	  $SQL .= "       msg.`objetivo` = ".$objetivo." AND ";
	  $SQL .= "       msg.`leido` = 0 ";
	  $SQL .= " ORDER BY msg.`id` ";

     if (!$mysqli->real_query($SQL))
     {
       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/*************************************************************************************/
	function LeerMensajes($msgIds) //marca como leidos una lista de mensajes de chat
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (false);
     }

		$SQL = "UPDATE `mensaje` SET ";
		$SQL .= "mensaje.`leido`= 1 ";
		$SQL .= "WHERE mensaje.`id` IN ($msgIds)";

	 //EJECUTO EL QUERY
     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return ($false);
     }

	 $mysqli->close();
     return (true);
    }

	/*************************************************************************************/
	function Consulta_Historico_Eventos($movil,$fechai,$fechaf,$process){
	    global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

		$SQL = " (SELECT `evmahistorico_wc`.`FECHAHORA` as FECHA_MENSAJE, ";
		$SQL .= "		 ABMc.`AVL_IDENTIFICADOR` as MOVIL, ";
        $SQL .= "		 `evmahistorico_wc`.`DETALLE`, ";
        $SQL .= "		 `evmahistorico_wc`.`PROCESADO`, ";
		$SQL .= "		 `evmahistorico_wc`.`DATOS`, ";
		$SQL .= "		 `evmahistorico_wc`.`USER_PROCESS` ";
		$SQL .= "FROM `evmahistorico_wc`,  `almacodigos`, `abmacodigos` ABMc ";
		$SQL .= "WHERE (`evmahistorico_wc`.`FECHAHORA` BETWEEN '$fechai' AND '$fechaf') ";
		$SQL .= "AND (`evmahistorico_wc`.`ORDER_RL` IN ($movil)) ";
		$SQL .= "AND (`almacodigos`.`ORDER_ID` = `evmahistorico_wc`.`EVENTO`) ";
      	$SQL .= "AND (`almacodigos`.`ADM_WEB` = 1) ";
        $SQL .= "AND (`almacodigos`.`VER_WEB` = 1) ";
		if ($process==1) //solo no procesados
			$SQL .= "AND (`evmahistorico_wc`.`PROCESADO` = 0) ";
		if ($process==2) //solo procesados
			$SQL .= "AND (`evmahistorico_wc`.`PROCESADO` = 1) ";
		$SQL .= "AND (ABMc.`ORDER_ID` = `evmahistorico_wc`.`ORDER_RL`) ";
		$SQL .= ")UNION (";
		$SQL .= "SELECT `evmahistorico`.`FECHAHORA` as FECHA_MENSAJE, ";
		$SQL .= "		 ABMc.`AVL_IDENTIFICADOR` as MOVIL, ";
		$SQL .= "       `evmahistorico`.`DETALLE`, ";
		$SQL .= "       `evmahistorico`.`PROCESADO`, ";
		$SQL .= "		`evmahistorico`.`DATOS`, ";
		$SQL .= "		`evmahistorico`.`USER_PROCESS` ";
		$SQL .= "FROM `evmahistorico`, `almacodigos`, `abmacodigos` ABMc ";
		$SQL .= "WHERE (`evmahistorico`.`FECHAHORA` BETWEEN '$fechai' AND '$fechaf') ";
		$SQL .= "AND (`evmahistorico`.`ORDER_RL` IN ($movil)) ";
		$SQL .= "AND (`almacodigos`.`ORDER_ID` = `evmahistorico`.`EVENTO`) ";
      	$SQL .= "AND (`almacodigos`.`ADM_WEB` = 1) ";
        $SQL .= "AND (`almacodigos`.`VER_WEB` = 1) ";
		if ($process==1) //solo no procesados
			$SQL .= "AND (`evmahistorico`.`PROCESADO` = 0) ";
		if ($process==2) //solo procesados
			$SQL .= "AND (`evmahistorico`.`PROCESADO` = 1) ";
		$SQL .= "AND (ABMc.`ORDER_ID` = `evmahistorico`.`ORDER_RL`) ";
		$SQL .= ") ORDER BY FECHA_MENSAJE ASC ";

        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
    function Consulta_Historico_Avl2($order_id,$fechaInicio,$fechaFin, $ddeRecord, $limite)
    {
	    global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $SQL = "call z_consulta_historico_avl('$fechaInicio','$fechaFin',$order_id,$ddeRecord,$limite)";
        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
	function verificarMantenimiento()
	{
	global $LOGGER;
    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	$SQL = "select * from mantenimiento M where M.activo=1 order by M.`id` DESC LIMIT 1";
	if (!$mysqli->real_query($SQL))
    {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
    }
	return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function verificarSendMail($mailId)
	{
	global $LOGGER;
    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	$SQL = "select R.`enviado` from `recordatorio` r where R.id=".$mailId;
	if (!$mysqli->real_query($SQL))
    {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
    }
	return BykomCliente::getResultado($mysqli);
	}

	 /**********************************************************************/
	function verificarMailStatus()
	{
	global $LOGGER;
    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
	$SQL = "select emailStatus from emailmessages";
	if (!$mysqli->real_query($SQL))
    {
      $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      exit();
    }
	return BykomCliente::getResultado($mysqli);
	}

  //**************************************************************************
  //Desglosa un tiempo recibido en milisegundos en formato Dias-Horas-Minutos y Segundos
  function convertMStoDHMS($ms){
  	    $sec = floor($ms/1000);
		$min = floor($sec/60);
		$sec = $sec % 60;
		$t = ((($sec>9)?"":"0").$sec)."s";

		$hr = floor($min/60);
		$min = $min % 60;
		$t = ((($min>9)?"":"0").$min) . "m " . $t;

		$day = floor($hr/60);
		$hr = $hr % 60;
		$t = ((($hr>9)?"":"0").$hr) . "h " . $t;
		$t = $day . "d " . $t;

		return $t;
	}

	/**********************************************************************/
	function Consulta_Historico_Paradas($cuenta,$fechai,$fechaf,$tiempoMM)
	{
		//0) inicializo variables
		$campos = array	('FECHA'=>0, 'TIEMPO'=>1, 'WARNING'=>2, 'OBSERVACIONES'=>3, 'FECHADECORADA'=>4, 'APROXIMACION'=>5, 'LATITUD'=>6, 'LONGITUD'=>7, 'CUENTA'=>8);
		$datos = array();
		$resultado = new cResultado($campos, $datos);
  	    $contadorParadas = 0;
		$posiMovilParada = NULL;
		$warningParada = 0;
		$warningLabel = '';
		$timeParadaAnterior = 0;
		$sumaTimeParada = 0;
		$fila = 0;

		//1) consulto todos los movimientos
		$consulta = BykomCliente::Consulta_Historico_Avl2($cuenta,$fechai,$fechaf,0,10000);

		//2) verifico y genero eventos de parada, imprimiendo sus items.
	    for($i=0; $i<$consulta->cantidad(); $i++ )
		{
			//a) calculo fecha del mensaje
			$time = strtotime($consulta->campo('FECHA_MENSAJE', $i));
			//b) verificar si esta detenido
			if ($consulta->campo('VELOCIDAD', $i)==0){
				if ($timeParadaAnterior==0){
					$timeParadaAnterior = $time;
					$posiMovilParada = $i;
				}
				$sumaTimeParada += ($time - $timeParadaAnterior);
				$timeParadaAnterior = $time;
			}
			//c) generar WARNING's
			//NIVEL 1 >> La distancia entre la para anterior y la nueva es mayor a 200mts siendo que el movil estubo con velocidades 0 en ambas paradas.
			if(($posiMovilParada!==NULL)&&($sumaTimeParada>0)){
				//calculo distancia entre paradas por PITAGORAS::
	  			$a = pow(($consulta->campo('LATITUD', $i) - $consulta->campo('LATITUD', $posiMovilParada)),2);
		  		$b = pow(($consulta->campo('LONGITUD', $i) - $consulta->campo('LONGITUD', $posiMovilParada)),2);
		  		$c = sqrt($a + $b) * 100 * 1000; //hipotenusa en metros
				if ($c > 200){
					$warningParada = 1;
				 	$warningLabel .= "* El movil dejo de reportar por un tiempo prolongado";
				}
			}
			//d) genero e imprimo la fila, de ser necesario
			if (($consulta->campo('VELOCIDAD', $i)!=0) || ($i== ($consulta->cantidad()-1)) || $warningParada) {
				if (($sumaTimeParada/60)>$tiempoMM){ //HAY QUE IMPRIMIRLO
					$resultado->setCampo('FECHADECORADA', $fila, $consulta->campo('FECHA_MENSAJE', $posiMovilParada));
					$myDate = date('d/m/Y H:i:s',strtotime($consulta->campo('FECHA_MENSAJE', $posiMovilParada)));
					$resultado->setCampo('FECHA', $fila, $myDate.'');
					$timeStop = BykomCliente::convertMStoDHMS($sumaTimeParada*1000);
					$resultado->setCampo('TIEMPO', $fila, $timeStop);
					$contadorParadas++;
					if ($consulta->campo('EDAD_MENSAJE', $posiMovilParada) >= 255) {
						$warningParada = 1;
						$warningLabel .= "* Dato invalido.\n ";
					}
					if ( $posiMovilParada!=NULL){
						$resultado->setCampo('LATITUD', $fila, $consulta->campo('LATITUD', $posiMovilParada));
						$resultado->setCampo('LONGITUD', $fila, $consulta->campo('LONGITUD', $posiMovilParada));
					}
					else {
						$resultado->setCampo('LATITUD', $fila, $consulta->campo('LATITUD', $i));
						$resultado->setCampo('LONGITUD', $fila, $consulta->campo('LONGITUD', $i));
					}
					$resultado->setCampo('WARNING', $fila, $warningParada);
					$aproximacion = BykomCliente::Obtener_Direccion_Abreviada($consulta->campo('APROXIMACION', $posiMovilParada));
					$resultado->setCampo('APROXIMACION', $fila, $aproximacion);
					if ($warningParada)
						$resultado->setCampo('OBSERVACIONES', $fila, $warningLabel);
					$resultado->setCampo('CUENTA', $fila, $cuenta);
					$fila++;
				 }
				 $sumaTimeParada = 0;
				 $timeParadaAnterior = 0;
				 $warningParada = 0;
			 	 $warningLabel = '';
			}
		}
 	   return $resultado;
	}
	function cierroViaje($indice, $cuenta, $metrosViaje, $tiempoViaje, $sumaTiempoParada, $vListadoPuntos, $fechaInicio, $fechaFinViaje){
		$viaje = new Viajes();
		$viaje->id = $indice;  
		$viaje->movil = $cuenta;
		$viaje->fechaIni = $fechaInicio;
		$viaje->fechaFin = $fechaFin;
		$viaje->km =$metrosViaje;
		$viaje->tiempo = $tiempoViaje;
		$viaje->tiempoDetenido = $sumaTiempoParada;
		$viaje->vListadoPuntos = $vListadoPuntos;
		return $viaje;
	}
	
	function Hipotenusa($consulta,$i,$j){
		$a = pow(($consulta->campo('LATITUD', $i) - $consulta->campo('LATITUD', $j)),2);
  		$b = pow(($consulta->campo('LONGITUD', $i) - $consulta->campo('LONGITUD', $j)),2);
  		$c = sqrt($a + $b) * 100 * 1000; //hipotenusa en metros
  		return $c;
	}
	/************************VIAJES*******************************************/
	function Consulta_Historico_Viajes($cuenta,$fechai,$fechaf,$tiempoMM){
		//1) consulto todos los movimientos
		$consulta = BykomCliente::Consulta_Historico_Avl2($cuenta,$fechai,$fechaf,0,10000);
		//2) verifico y genero eventos de parada, imprimiendo sus items.
	    $resultadoViajes = array();
	    $vListadoPuntos = array();
		$oPunto			= new stdClass();
	    $comienzoViaje = true;
	    $sumaTiempoViaje = 0;
	    $metrosPorHipotenusa = 0;
	    $finViaje = false;
	    $fechaComienzoViaje = -1;
	    $indice = 1;
	    $i=0;
		while ($i < $consulta->cantidad() - 1) {
			if ($fechaComienzoViaje == -1) {
				$fechaComienzoViaje = $consulta->campo('FECHA_MENSAJE', $i);
			}
			$j = $i+1;
			//a) calculo fecha del mensaje
			$timeP1 = strtotime($consulta->campo('FECHA_MENSAJE', $i));
			$timeP2 = strtotime($consulta->campo('FECHA_MENSAJE', $j));
			//Descarto velocidades = 0 iniciales
			if ($comienzoViaje && $consulta->campo('VELOCIDAD', $i) != 0){
				$comienzoViaje = false;
			} 
			$metrosEntrePuntos += Hipotenusa($consulta,$i,$j);
			//Posible viaje
			if (!$comienzoViaje) {
				if ($consulta->campo('VELOCIDAD', $i) == 0 && $metrosEntrePuntos < 200 && $sumaTiempoParada < 180) {
					$sumaTiempoParada += ($timeP2 - $timeP1);
				} else {
					$finViaje = true;
					$fechaFinViaje = $consulta->campo('FECHA_MENSAJE', $i);
				}
			} 
			$sumaTiempoViaje += ($timeP2 - $timeP1);
			$metrosViaje += $metrosEntrePuntos;
			$oPunto->longitud 	= $consulta->campo('LONGITUD', $i);
			$oPunto->latitud 	= $consulta->campo('LATITUD', $i);
			$vListadoPuntos[]	= $oPunto;
			if ($finViaje) {
				$viaje = cierroViaje($indice, $cuenta, $metrosViaje, $sumaTiempoViaje, $sumaTiempoParada, $vListadoPuntos, $fechaComienzoViaje, $fechaFinViaje);
				$resultadoViajes[] = $viaje;
				$indice ++;
				$sumaTiempoViaje = 0;
				$metrosViaje = 0;
				$sumaTiempoParada = 0;
				$vListadoPuntos = array();
				$comienzoViaje = true;
				$fechaComienzoViaje = $fechaFinViaje;
			}
			$i++;
		}
 	   	return $resultadoViajes;
	}

	/**********************************************************************/
    function Consulta_Publicidad($cuentaId, $objetivo)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $SQL = "select P.`id` as publicidadId, ";
		$SQL.= "	   C.`canCheckPublicidad` as canCheck ";
		$SQL.= "from `publicidad` P, `wcconfig` C ";
		$SQL.= "where C.`publicidad` AND ";
		$SQL.= "      P.`activa` AND ";
		$SQL.= "      P.id NOT IN (select PU.publicidadFk ";
		$SQL.= "                  from `publicidad_user` PU ";
		$SQL.= "                  where PU.`publicidadFk` = P.id and ";
		$SQL.= "                        PU.`objetivo` = $objetivo and ";
		$SQL.= "                        PU.`tablaId` = $cuentaId)";

        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
		$LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
        return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function Cargar_Publicidad($publicidadId)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           $LOGGER->addLine('ERROR', mysqli_connect_error());
           exit();
        }

        $SQL = "select * ";
		$SQL.= "from `publicidad` P ";
		$SQL.= "where P.`id` = $publicidadId";

        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
		$LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
        return BykomCliente::getResultado($mysqli);
    }
	/**********************************************************************/
   function SaveCheck_Publicidad($publicidadId, $cuenta, $objetivo)
    {
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
        if (mysqli_connect_errno())
        {
           $LOGGER->addLine('ERROR', mysqli_connect_error());
           exit();
        }

        $SQL = "INSERT INTO `publicidad_user` (`tablaId`,`objetivo`,`publicidadFk`) ";
		$SQL.= "VALUES ($cuenta, $objetivo, $publicidadId)";

        if (!$mysqli->real_query($SQL))
        {
           $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
		$LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
        return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
	 function PersistirGeoReference($id, $lat, $lon) // persiste un elemento en la tabla 'georeference'
	{
	 global $LOGGER;
	 if (($id=='')||($id==null)){
	 	return (0);
	 }
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (0);
     }

	 $SQL = "SELECT * FROM georeference WHERE SYS2015 = '$id'";
	 if (!$mysqli->real_query($SQL)) {
	 	$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
     	return (0);
     }
	 $resultado = BykomCliente::getResultado($mysqli);

	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB);
     if (mysqli_connect_errno())
     {
       return (0);
     }
	 if ($resultado->cantidad() == 0) { //ES UN INSERT
	 	$SQL = "INSERT INTO georeference(`SYS2015`, `LATITUD`, `LONGITUD`) ";
		$SQL .= "VALUES ('$id', '$lat', '$lon');";
	 }
	 else{
	 	$SQL = "UPDATE georeference SET ";
		$SQL .= "georeference.`LATITUD`='$lat', ";
		$SQL .= "georeference.`LONGITUD`='$lon' ";
		$SQL .= " WHERE georeference.`SYS2015` = '$id'";
	 }

     if (!$mysqli->real_query($SQL))
     {
	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
       return (0);
     }
	 $mysqli->close();
     return (1);
    }

}
?>
